Version 2.14.0-46.0.dev

Merge commit '931f7dc2e6d27b728038b74371922f6aa2f51c74' into 'dev'
diff --git a/pkg/_fe_analyzer_shared/lib/src/messages/codes.dart b/pkg/_fe_analyzer_shared/lib/src/messages/codes.dart
index ddb14d5..7299a94 100644
--- a/pkg/_fe_analyzer_shared/lib/src/messages/codes.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/messages/codes.dart
@@ -132,7 +132,7 @@
   }
 
   FormattedMessage withFormatting(PlainAndColorizedString formatted, int line,
-      int column, Severity severity, List<FormattedMessage> relatedInformation,
+      int column, Severity severity, List<FormattedMessage>? relatedInformation,
       {List<Uri>? involvedFiles}) {
     return new FormattedMessage(this, formatted.plain, formatted.colorized,
         line, column, severity, relatedInformation,
diff --git a/pkg/front_end/lib/src/api_prototype/compiler_options.dart b/pkg/front_end/lib/src/api_prototype/compiler_options.dart
index 23ba26d..69ba280 100644
--- a/pkg/front_end/lib/src/api_prototype/compiler_options.dart
+++ b/pkg/front_end/lib/src/api_prototype/compiler_options.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.9
-
 library front_end.compiler_options;
 
 import 'package:_fe_analyzer_shared/src/messages/diagnostic_message.dart'
@@ -51,7 +49,7 @@
   ///
   /// If `null`, the SDK will be searched for using
   /// [Platform.resolvedExecutable] as a starting point.
-  Uri sdkRoot;
+  Uri? sdkRoot;
 
   /// Uri to a platform libraries specification file.
   ///
@@ -63,9 +61,9 @@
   /// If a value is not specified and `compileSdk = true`, the compiler will
   /// infer at a default location under [sdkRoot], typically under
   /// `lib/libraries.json`.
-  Uri librariesSpecificationUri;
+  Uri? librariesSpecificationUri;
 
-  DiagnosticMessageHandler onDiagnostic;
+  DiagnosticMessageHandler? onDiagnostic;
 
   /// URI of the ".dart_tool/package_config.json" or ".packages" file
   /// (typically a "file:" URI).
@@ -79,7 +77,7 @@
   ///
   /// If the URI's path component is empty (e.g. `new Uri()`), no packages file
   /// will be used.
-  Uri packagesFileUri;
+  Uri? packagesFileUri;
 
   /// URIs of additional dill files.
   ///
@@ -97,11 +95,11 @@
   ///
   /// If `null` and [compileSdk] is false, the SDK summary will be searched for
   /// at a default location within [sdkRoot].
-  Uri sdkSummary;
+  Uri? sdkSummary;
 
   /// The declared variables for use by configurable imports and constant
   /// evaluation.
-  Map<String, String> declaredVariables;
+  Map<String, String>? declaredVariables;
 
   /// The [FileSystem] which should be used by the front end to access files.
   ///
@@ -117,42 +115,22 @@
   /// When this option is `true`, [sdkSummary] must be null.
   bool compileSdk = false;
 
-  @Deprecated("Unused internally.")
-  bool chaseDependencies;
-
-  /// Patch files to apply on the core libraries for a specific target platform.
-  ///
-  /// Keys in the map are the name of the library with no `dart:` prefix, for
-  /// example:
-  ///
-  ///      {'core': [
-  ///         'file:///location/of/core/patch_file1.dart',
-  ///         'file:///location/of/core/patch_file2.dart',
-  ///         ]}
-  ///
-  /// The values can be either absolute or relative URIs. Absolute URIs are read
-  /// directly, while relative URIs are resolved from the [sdkRoot].
-  // TODO(sigmund): provide also a flag to load this data from a file (like
-  // libraries.json)
-  @Deprecated("Unused internally.")
-  Map<String, List<Uri>> targetPatches = <String, List<Uri>>{};
-
   /// Enable or disable experimental features. Features mapping to `true` are
   /// explicitly enabled. Features mapping to `false` are explicitly disabled.
   /// Features not mentioned in the map will have their default value.
   Map<ExperimentalFlag, bool> explicitExperimentalFlags =
       <ExperimentalFlag, bool>{};
 
-  Map<ExperimentalFlag, bool> defaultExperimentFlagsForTesting;
-  AllowedExperimentalFlags allowedExperimentalFlagsForTesting;
-  Map<ExperimentalFlag, Version> experimentEnabledVersionForTesting;
-  Map<ExperimentalFlag, Version> experimentReleasedVersionForTesting;
+  Map<ExperimentalFlag, bool>? defaultExperimentFlagsForTesting;
+  AllowedExperimentalFlags? allowedExperimentalFlagsForTesting;
+  Map<ExperimentalFlag, Version>? experimentEnabledVersionForTesting;
+  Map<ExperimentalFlag, Version>? experimentReleasedVersionForTesting;
 
   /// Environment map used when evaluating `bool.fromEnvironment`,
   /// `int.fromEnvironment` and `String.fromEnvironment` during constant
   /// evaluation. If the map is `null`, all environment constants will be left
   /// unevaluated and can be evaluated by a constant evaluator later.
-  Map<String, String> environmentDefines = null;
+  Map<String, String>? environmentDefines = null;
 
   /// Report an error if a constant could not be evaluated (either because it
   /// is an environment constant and no environment was specified, or because
@@ -171,12 +149,7 @@
   ///   * how to deal with non-standard features like `native` extensions.
   ///
   /// If not specified, the default target is the VM.
-  Target target;
-
-  /// Deprecated. Has no affect on front-end.
-  // TODO(dartbug.com/37514) Remove this field once DDK removes its uses of it.
-  @Deprecated("Unused internally.")
-  bool enableAsserts = false;
+  Target? target;
 
   /// Whether to show verbose messages (mainly for debugging and performance
   /// tracking).
@@ -353,8 +326,8 @@
     }
     if (target != other.target) {
       if (target.runtimeType != other.target.runtimeType) return false;
-      if (target.name != other.target.name) return false;
-      if (target.flags != other.target.flags) return false;
+      if (target?.name != other.target?.name) return false;
+      if (target?.flags != other.target?.flags) return false;
     }
     // enableAsserts is not used anywhere, so ignored here.
     if (!ignoreVerbose) {
@@ -391,7 +364,7 @@
 
 /// Parse experimental flag arguments of the form 'flag' or 'no-flag' into a map
 /// from 'flag' to `true` or `false`, respectively.
-Map<String, bool> parseExperimentalArguments(List<String> arguments) {
+Map<String, bool> parseExperimentalArguments(List<String>? arguments) {
   Map<String, bool> result = {};
   if (arguments != null) {
     for (String argument in arguments) {
@@ -419,14 +392,14 @@
 /// If an expired flag is set to its default value the supplied warning
 /// handler is called with a warning message.
 Map<ExperimentalFlag, bool> parseExperimentalFlags(
-    Map<String, bool> experiments,
-    {void onError(String message),
-    void onWarning(String message)}) {
+    Map<String, bool>? experiments,
+    {required void Function(String message) onError,
+    void Function(String message)? onWarning}) {
   Map<ExperimentalFlag, bool> flags = <ExperimentalFlag, bool>{};
   if (experiments != null) {
     for (String experiment in experiments.keys) {
-      bool value = experiments[experiment];
-      ExperimentalFlag flag = parseExperimentalFlag(experiment);
+      bool value = experiments[experiment]!;
+      ExperimentalFlag? flag = parseExperimentalFlag(experiment);
       if (flag == null) {
         onError("Unknown experiment: " + experiment);
       } else if (flags.containsKey(flag)) {
@@ -435,7 +408,7 @@
               "Experiment specified with conflicting values: " + experiment);
         }
       } else {
-        if (expiredExperimentalFlags[flag]) {
+        if (expiredExperimentalFlags[flag]!) {
           if (value != defaultExperimentalFlags[flag]) {
             /// Produce an error when the value is not the default value.
             if (value) {
@@ -447,7 +420,7 @@
                   experiment +
                   " is no longer supported.");
             }
-            value = defaultExperimentalFlags[flag];
+            value = defaultExperimentalFlags[flag]!;
           } else if (onWarning != null) {
             /// Produce a warning when the value is the default value.
             if (value) {
@@ -492,11 +465,11 @@
   /// If a name isn't recognized and [onError] isn't provided, an error is
   /// thrown.
   static Set<InvocationMode> parseArguments(String arg,
-      {void Function(String) onError}) {
+      {void Function(String)? onError}) {
     Set<InvocationMode> result = {};
     for (String name in arg.split(',')) {
       if (name.isNotEmpty) {
-        InvocationMode mode = fromName(name);
+        InvocationMode? mode = fromName(name);
         if (mode == null) {
           String message = "Unknown invocation mode '$name'.";
           if (onError != null) {
@@ -513,7 +486,7 @@
   }
 
   /// Returns the [InvocationMode] with the given [name].
-  static InvocationMode fromName(String name) {
+  static InvocationMode? fromName(String name) {
     for (InvocationMode invocationMode in values) {
       if (name == invocationMode.name) {
         return invocationMode;
@@ -560,7 +533,7 @@
   /// If [name] isn't recognized and [onError] isn't provided, an error is
   /// thrown.
   static Verbosity parseArgument(String name,
-      {void Function(String) onError, Verbosity defaultValue: Verbosity.all}) {
+      {void Function(String)? onError, Verbosity defaultValue: Verbosity.all}) {
     for (Verbosity verbosity in values) {
       if (name == verbosity.name) {
         return verbosity;
@@ -588,7 +561,6 @@
           case Severity.ignored:
             return false;
         }
-        break;
       case Verbosity.warning:
         switch (severity) {
           case Severity.internalProblem:
@@ -600,7 +572,6 @@
           case Severity.ignored:
             return false;
         }
-        break;
       case Verbosity.info:
         switch (severity) {
           case Severity.internalProblem:
@@ -612,7 +583,6 @@
           case Severity.ignored:
             return false;
         }
-        break;
       case Verbosity.all:
         return true;
     }
diff --git a/pkg/front_end/lib/src/api_prototype/standard_file_system.dart b/pkg/front_end/lib/src/api_prototype/standard_file_system.dart
index 35d34d5..ead93b4 100644
--- a/pkg/front_end/lib/src/api_prototype/standard_file_system.dart
+++ b/pkg/front_end/lib/src/api_prototype/standard_file_system.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.9
-
 library front_end.standard_file_system;
 
 import 'dart:io' as io;
@@ -112,7 +110,7 @@
    */
   FileSystemException _toFileSystemException(io.FileSystemException exception) {
     String message = exception.message;
-    String osMessage = exception.osError?.message;
+    String? osMessage = exception.osError?.message;
     if (osMessage != null && osMessage.isNotEmpty) {
       message = osMessage;
     }
@@ -125,7 +123,9 @@
   @override
   final Uri uri;
 
-  DataFileSystemEntity(this.uri);
+  DataFileSystemEntity(this.uri)
+      : assert(uri.scheme == 'data'),
+        assert(uri.data != null);
 
   @override
   int get hashCode => uri.hashCode;
@@ -141,7 +141,7 @@
 
   @override
   Future<List<int>> readAsBytes() async {
-    return uri.data.contentAsBytes();
+    return uri.data!.contentAsBytes();
   }
 
   @override
@@ -152,6 +152,6 @@
 
   @override
   Future<String> readAsString() async {
-    return uri.data.contentAsString();
+    return uri.data!.contentAsString();
   }
 }
diff --git a/pkg/front_end/lib/src/base/processed_options.dart b/pkg/front_end/lib/src/base/processed_options.dart
index 60c4162..68d1a44 100644
--- a/pkg/front_end/lib/src/base/processed_options.dart
+++ b/pkg/front_end/lib/src/base/processed_options.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.9
-
 import 'dart:io' show exitCode;
 
 import 'dart:typed_data' show Uint8List;
@@ -99,16 +97,16 @@
 
   /// The package map derived from the options, or `null` if the package map has
   /// not been computed yet.
-  PackageConfig _packages;
+  PackageConfig? _packages;
 
   /// The uri for .packages derived from the options, or `null` if the package
   /// map has not been computed yet or there is no .packages in effect.
-  Uri _packagesUri;
-  Uri get packagesUri => _packagesUri;
+  Uri? _packagesUri;
+  Uri? get packagesUri => _packagesUri;
 
   /// The object that knows how to resolve "package:" and "dart:" URIs,
   /// or `null` if it has not been computed yet.
-  UriTranslator _uriTranslator;
+  UriTranslator? _uriTranslator;
 
   /// The SDK summary, or `null` if it has not been read yet.
   ///
@@ -116,7 +114,7 @@
   /// where all method bodies are left out. In essence, it contains just API
   /// signatures and constants. The summary should include inferred top-level
   /// types unless legacy mode is enabled.
-  Component _sdkSummaryComponent;
+  Component? _sdkSummaryComponent;
 
   /// The component for each uri in `options.additionalDills`.
   ///
@@ -124,45 +122,45 @@
   /// where all method bodies are left out. In essence, it contains just API
   /// signatures and constants. The summaries should include inferred top-level
   /// types unless legacy mode is enabled.
-  List<Component> _additionalDillComponents;
+  List<Component>? _additionalDillComponents;
 
   /// The location of the SDK, or `null` if the location hasn't been determined
   /// yet.
-  Uri _sdkRoot;
-  Uri get sdkRoot {
+  Uri? _sdkRoot;
+  Uri? get sdkRoot {
     _ensureSdkDefaults();
     return _sdkRoot;
   }
 
-  Uri _sdkSummary;
-  Uri get sdkSummary {
+  Uri? _sdkSummary;
+  Uri? get sdkSummary {
     _ensureSdkDefaults();
     return _sdkSummary;
   }
 
-  List<int> _sdkSummaryBytes;
+  List<int>? _sdkSummaryBytes;
   bool _triedLoadingSdkSummary = false;
 
   /// Get the bytes of the SDK outline, if any.
-  Future<List<int>> loadSdkSummaryBytes() async {
+  Future<List<int>?> loadSdkSummaryBytes() async {
     if (_sdkSummaryBytes == null && !_triedLoadingSdkSummary) {
       if (sdkSummary == null) return null;
-      FileSystemEntity entry = fileSystem.entityForUri(sdkSummary);
+      FileSystemEntity entry = fileSystem.entityForUri(sdkSummary!);
       _sdkSummaryBytes = await _readAsBytes(entry);
       _triedLoadingSdkSummary = true;
     }
     return _sdkSummaryBytes;
   }
 
-  Uri _librariesSpecificationUri;
-  Uri get librariesSpecificationUri {
+  Uri? _librariesSpecificationUri;
+  Uri? get librariesSpecificationUri {
     _ensureSdkDefaults();
     return _librariesSpecificationUri;
   }
 
   Ticker ticker;
 
-  Uri get packagesUriRaw => _raw.packagesFileUri;
+  Uri? get packagesUriRaw => _raw.packagesFileUri;
 
   bool get verbose => _raw.verbose;
 
@@ -192,9 +190,9 @@
   final List<Uri> inputs;
 
   /// The Uri where output is generated, may be null.
-  final Uri output;
+  final Uri? output;
 
-  final Map<String, String> environmentDefines;
+  final Map<String, String>? environmentDefines;
 
   bool get errorOnUnevaluatedConstant => _raw.errorOnUnevaluatedConstant;
 
@@ -202,7 +200,7 @@
   int fatalDiagnosticCount = 0;
 
   /// Initializes a [ProcessedOptions] object wrapping the given [rawOptions].
-  ProcessedOptions({CompilerOptions options, List<Uri> inputs, this.output})
+  ProcessedOptions({CompilerOptions? options, List<Uri>? inputs, this.output})
       : this._raw = options ?? new CompilerOptions(),
         this.inputs = inputs ?? <Uri>[],
         // TODO(askesc): Copy the map when kernel_service supports that.
@@ -212,20 +210,20 @@
         this.ticker = new Ticker(isVerbose: options?.verbose ?? false);
 
   FormattedMessage format(
-      LocatedMessage message, Severity severity, List<LocatedMessage> context,
-      {List<Uri> involvedFiles}) {
+      LocatedMessage message, Severity severity, List<LocatedMessage>? context,
+      {List<Uri>? involvedFiles}) {
     int offset = message.charOffset;
-    Uri uri = message.uri;
-    Location location = offset == -1 ? null : getLocation(uri, offset);
+    Uri? uri = message.uri;
+    Location? location =
+        offset == -1 || uri == null ? null : getLocation(uri, offset);
     PlainAndColorizedString formatted =
         command_line_reporting.format(message, severity, location: location);
-    List<FormattedMessage> formattedContext;
+    List<FormattedMessage>? formattedContext;
     if (context != null && context.isNotEmpty) {
       formattedContext =
-          new List<FormattedMessage>.filled(context.length, null);
-      for (int i = 0; i < context.length; i++) {
-        formattedContext[i] = format(context[i], Severity.context, null);
-      }
+          new List<FormattedMessage>.generate(context.length, (int i) {
+        return format(context[i], Severity.context, null);
+      });
     }
     return message.withFormatting(formatted, location?.line ?? -1,
         location?.column ?? -1, severity, formattedContext,
@@ -233,7 +231,7 @@
   }
 
   void report(LocatedMessage message, Severity severity,
-      {List<LocatedMessage> context, List<Uri> involvedFiles}) {
+      {List<LocatedMessage>? context, List<Uri>? involvedFiles}) {
     if (command_line_reporting.isHidden(severity)) return;
     if (command_line_reporting.isCompileTimeError(severity)) {
       CompilerContext.current.logError(message, severity);
@@ -304,13 +302,13 @@
     }
 
     if (_raw.sdkRoot != null &&
-        !await fileSystem.entityForUri(sdkRoot).exists()) {
+        !await fileSystem.entityForUri(sdkRoot!).exists()) {
       reportWithoutLocation(
-          templateSdkRootNotFound.withArguments(sdkRoot), Severity.error);
+          templateSdkRootNotFound.withArguments(sdkRoot!), Severity.error);
       return false;
     }
 
-    Uri summary = sdkSummary;
+    Uri? summary = sdkSummary;
     if (summary != null && !await fileSystem.entityForUri(summary).exists()) {
       reportWithoutLocation(
           templateSdkSummaryNotFound.withArguments(summary), Severity.error);
@@ -340,7 +338,7 @@
   /// whole-program.
   bool get compileSdk => _raw.compileSdk;
 
-  FileSystem _fileSystem;
+  FileSystem? _fileSystem;
 
   /// Get the [FileSystem] which should be used by the front end to access
   /// files.
@@ -358,7 +356,7 @@
   /// version).
   String get currentSdkVersion => _raw.currentSdkVersion;
 
-  Target _target;
+  Target? _target;
   Target get target =>
       _target ??= _raw.target ?? new NoneTarget(new TargetFlags());
 
@@ -429,10 +427,10 @@
 
   /// Get an outline component that summarizes the SDK, if any.
   // TODO(sigmund): move, this doesn't feel like an "option".
-  Future<Component> loadSdkSummary(CanonicalName nameRoot) async {
+  Future<Component?> loadSdkSummary(CanonicalName nameRoot) async {
     if (_sdkSummaryComponent == null) {
       if (sdkSummary == null) return null;
-      List<int> bytes = await loadSdkSummaryBytes();
+      List<int>? bytes = await loadSdkSummaryBytes();
       if (bytes != null && bytes.isNotEmpty) {
         _sdkSummaryComponent =
             loadComponent(bytes, nameRoot, fileUri: sdkSummary);
@@ -455,19 +453,20 @@
   Future<List<Component>> loadAdditionalDills(CanonicalName nameRoot) async {
     if (_additionalDillComponents == null) {
       List<Uri> uris = _raw.additionalDills;
+      // ignore: unnecessary_null_comparison
       if (uris == null || uris.isEmpty) return const <Component>[];
       // TODO(sigmund): throttle # of concurrent operations.
-      List<List<int>> allBytes = await Future.wait(
+      List<List<int>?> allBytes = await Future.wait(
           uris.map((uri) => _readAsBytes(fileSystem.entityForUri(uri))));
       List<Component> result = [];
       for (int i = 0; i < uris.length; i++) {
-        if (allBytes[i] == null) continue;
-        List<int> bytes = allBytes[i];
+        List<int>? bytes = allBytes[i];
+        if (bytes == null) continue;
         result.add(loadComponent(bytes, nameRoot, fileUri: uris[i]));
       }
       _additionalDillComponents = result;
     }
-    return _additionalDillComponents;
+    return _additionalDillComponents!;
   }
 
   void set loadAdditionalDillsComponents(List<Component> components) {
@@ -480,7 +479,7 @@
 
   /// Helper to load a .dill file from [uri] using the existing [nameRoot].
   Component loadComponent(List<int> bytes, CanonicalName nameRoot,
-      {bool alwaysCreateNewNamedNodes, Uri fileUri}) {
+      {bool? alwaysCreateNewNamedNodes, Uri? fileUri}) {
     Component component =
         target.configureComponent(new Component(nameRoot: nameRoot));
     // TODO(ahe): Control lazy loading via an option.
@@ -510,7 +509,7 @@
       ticker.logMs("Read packages file");
       _uriTranslator = new UriTranslator(libraries, packages);
     }
-    return _uriTranslator;
+    return _uriTranslator!;
   }
 
   Future<TargetLibrariesSpecification> _computeLibrarySpecification() async {
@@ -520,21 +519,22 @@
     if (name.endsWith('_fasta')) name = name.substring(0, name.length - 6);
 
     if (librariesSpecificationUri == null ||
-        !await fileSystem.entityForUri(librariesSpecificationUri).exists()) {
+        !await fileSystem.entityForUri(librariesSpecificationUri!).exists()) {
       if (compileSdk) {
         reportWithoutLocation(
             templateSdkSpecificationNotFound
-                .withArguments(librariesSpecificationUri),
+                .withArguments(librariesSpecificationUri!),
             Severity.error);
       }
       return new TargetLibrariesSpecification(name);
     }
 
-    String json =
-        await fileSystem.entityForUri(librariesSpecificationUri).readAsString();
+    String json = await fileSystem
+        .entityForUri(librariesSpecificationUri!)
+        .readAsString();
     try {
       LibrariesSpecification spec =
-          await LibrariesSpecification.parse(librariesSpecificationUri, json);
+          await LibrariesSpecification.parse(librariesSpecificationUri!, json);
       return spec.specificationFor(name);
     } on LibrariesSpecificationException catch (e) {
       reportWithoutLocation(
@@ -549,10 +549,10 @@
   /// This is an asynchronous getter since file system operations may be
   /// required to locate/read the packages file.
   Future<PackageConfig> _getPackages() async {
-    if (_packages != null) return _packages;
+    if (_packages != null) return _packages!;
     _packagesUri = null;
     if (_raw.packagesFileUri != null) {
-      return _packages = await createPackagesFromFile(_raw.packagesFileUri);
+      return _packages = await createPackagesFromFile(_raw.packagesFileUri!);
     }
 
     if (inputs.length > 1) {
@@ -582,7 +582,7 @@
     return _packages = await _findPackages(inputs.first);
   }
 
-  Future<Uint8List> _readFile(Uri uri, bool reportError) async {
+  Future<Uint8List?> _readFile(Uri uri, bool reportError) async {
     try {
       // TODO(ahe): We need to compute line endings for this file.
       FileSystemEntity entityForUri = fileSystem.entityForUri(uri);
@@ -616,9 +616,9 @@
   /// based in [forceCreation]).
   /// If the file does exist but is invalid an error is always reported and an
   /// empty package config is returned.
-  Future<PackageConfig> _createPackagesFromFile(
+  Future<PackageConfig?> _createPackagesFromFile(
       Uri requestedUri, bool forceCreation, bool requireJson) async {
-    Uint8List contents = await _readFile(requestedUri, forceCreation);
+    Uint8List? contents = await _readFile(requestedUri, forceCreation);
     if (contents == null) {
       if (forceCreation) {
         _packagesUri = null;
@@ -634,7 +634,7 @@
           report(
               templatePackagesFileFormat
                   .withArguments(error.message)
-                  .withLocation(requestedUri, error.offset, noLength),
+                  .withLocation(requestedUri, error.offset ?? -1, noLength),
               Severity.error);
         } else {
           reportWithoutLocation(
@@ -658,7 +658,7 @@
       report(
           templatePackagesFileFormat
               .withArguments(e.message)
-              .withLocation(requestedUri, e.offset, noLength),
+              .withLocation(requestedUri, e.offset ?? -1, noLength),
           Severity.error);
     } catch (e) {
       reportWithoutLocation(
@@ -679,14 +679,15 @@
     // If the input is a ".packages" file we assume the standard layout, and
     // if a ".dart_tool/package_config.json" exists, we'll use that (and require
     // it to be a json file).
+    PackageConfig? result;
     if (file.path.endsWith("/.packages")) {
       // .packages -> try the package_config first.
       Uri tryFirst = file.resolve(".dart_tool/package_config.json");
-      PackageConfig result =
-          await _createPackagesFromFile(tryFirst, false, true);
+      result = await _createPackagesFromFile(tryFirst, false, true);
       if (result != null) return result;
     }
-    return _createPackagesFromFile(file, true, false);
+    result = await _createPackagesFromFile(file, true, false);
+    return result ?? PackageConfig.empty;
   }
 
   /// Finds a package resolution strategy using a [FileSystem].
@@ -711,8 +712,8 @@
       return PackageConfig.empty;
     }
 
-    Future<Uri> checkInDir(Uri dir) async {
-      Uri candidate;
+    Future<Uri?> checkInDir(Uri dir) async {
+      Uri? candidate;
       try {
         candidate = dir.resolve('.dart_tool/package_config.json');
         if (await fileSystem.entityForUri(candidate).exists()) return candidate;
@@ -721,7 +722,7 @@
         return null;
       } catch (e) {
         Message message =
-            templateExceptionReadingFile.withArguments(candidate, '$e');
+            templateExceptionReadingFile.withArguments(candidate!, '$e');
         reportWithoutLocation(message, Severity.error);
         // We throw a new exception to ensure that the message include the uri
         // that led to the exception. Exceptions in Uri don't include the
@@ -731,7 +732,7 @@
     }
 
     // Check for $cwd/.packages
-    Uri candidate = await checkInDir(dir);
+    Uri? candidate = await checkInDir(dir);
     if (candidate != null) return createPackagesFromFile(candidate);
 
     // Check for cwd(/..)+/.packages
@@ -756,7 +757,7 @@
   void _ensureSdkDefaults() {
     if (_computedSdkDefaults) return;
     _computedSdkDefaults = true;
-    Uri root = _raw.sdkRoot;
+    Uri? root = _raw.sdkRoot;
     if (root != null) {
       // Normalize to always end in '/'
       if (!root.path.endsWith('/')) {
@@ -781,7 +782,7 @@
     if (_raw.librariesSpecificationUri != null) {
       _librariesSpecificationUri = _raw.librariesSpecificationUri;
     } else if (compileSdk) {
-      _librariesSpecificationUri = sdkRoot.resolve('lib/libraries.json');
+      _librariesSpecificationUri = sdkRoot!.resolve('lib/libraries.json');
     }
   }
 
@@ -835,7 +836,7 @@
     return '$sb';
   }
 
-  Future<List<int>> _readAsBytes(FileSystemEntity file) async {
+  Future<List<int>?> _readAsBytes(FileSystemEntity file) async {
     try {
       return await file.readAsBytes();
     } on FileSystemException catch (error) {
diff --git a/pkg/front_end/lib/src/compute_platform_binaries_location.dart b/pkg/front_end/lib/src/compute_platform_binaries_location.dart
index dce1614..0ecacc07 100644
--- a/pkg/front_end/lib/src/compute_platform_binaries_location.dart
+++ b/pkg/front_end/lib/src/compute_platform_binaries_location.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.9
-
 import "dart:io" show File, Platform;
 
 import 'package:kernel/ast.dart' show Source;
@@ -19,7 +17,7 @@
 ///
 /// If the target doesn't have a default platform dill file for the nnbd mode,
 /// [onError] is called.
-String computePlatformDillName(
+String? computePlatformDillName(
     Target target, NnbdMode nnbdMode, void Function() onError) {
   switch (target.name) {
     case 'dartdevc':
@@ -69,7 +67,7 @@
 /// of the platform libraries that are used to avoid recompiling those
 /// libraries.
 Uri computePlatformBinariesLocation({bool forceBuildDir: false}) {
-  String resolvedExecutable = Platform.environment['resolvedExecutable'];
+  String? resolvedExecutable = Platform.environment['resolvedExecutable'];
   // The directory of the Dart VM executable.
   Uri vmDirectory = Uri.base
       .resolveUri(
@@ -93,7 +91,7 @@
       String path = uri.path;
       if (path.startsWith("/sdk/")) {
         CompilerContext context = CompilerContext.current;
-        Uri sdkRoot = context.cachedSdkRoot;
+        Uri? sdkRoot = context.cachedSdkRoot;
         if (sdkRoot == null) {
           ProcessedOptions options = context.options;
           sdkRoot = options.sdkRoot;
@@ -108,6 +106,7 @@
           if (sdkRoot == null) {
             sdkRoot = (options.sdkSummary ?? computePlatformBinariesLocation())
                 .resolve("../../");
+            // ignore: unnecessary_null_comparison
             if (sdkRoot != null) {
               if (!isExistingFile(sdkRoot.resolve("lib/libraries.json"))) {
                 if (isExistingFile(sdkRoot.resolve("sdk/lib/libraries.json"))) {
@@ -124,7 +123,7 @@
         Uri candidate = sdkRoot.resolve(path.substring(5));
         if (isExistingFile(candidate)) {
           Map<Uri, Source> uriToSource = CompilerContext.current.uriToSource;
-          Source source = uriToSource[uri];
+          Source source = uriToSource[uri]!;
           if (source.source.isEmpty) {
             uriToSource[uri] = new Source(
                 source.lineStarts,
diff --git a/pkg/front_end/lib/src/fasta/builder/builder.dart b/pkg/front_end/lib/src/fasta/builder/builder.dart
index 4f2897d..fdd91f3 100644
--- a/pkg/front_end/lib/src/fasta/builder/builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/builder.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.9
-
 library fasta.declaration;
 
 import '../problems.dart' show unsupported;
@@ -12,7 +10,7 @@
   /// Used when multiple things with the same name are declared within the same
   /// parent. Only used for top-level and class-member declarations, not for
   /// block scopes.
-  Builder next;
+  Builder? next;
 
   Builder get parent;
 
@@ -211,7 +209,7 @@
 
 abstract class BuilderImpl implements Builder {
   @override
-  Builder next;
+  Builder? next;
 
   BuilderImpl();
 
@@ -298,7 +296,6 @@
   int finishPatch() {
     if (!isPatch) return 0;
     unsupported("${runtimeType}.finishPatch", charOffset, fileUri);
-    return 0;
   }
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/command_line_reporting.dart b/pkg/front_end/lib/src/fasta/command_line_reporting.dart
index 9ff9cf4..528c601 100644
--- a/pkg/front_end/lib/src/fasta/command_line_reporting.dart
+++ b/pkg/front_end/lib/src/fasta/command_line_reporting.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.9
-
 /// Provides a default implementation of the report and format methods of
 /// [CompilerContext] that are suitable for command-line tools. The methods in
 /// this library aren't intended to be called directly, instead, one should use
@@ -46,7 +44,7 @@
 /// command-line tool. This includes source snippets and - in the colorized
 /// version - different colors based on [severity].
 PlainAndColorizedString format(LocatedMessage message, Severity severity,
-    {Location location, Map<Uri, Source> uriToSource}) {
+    {Location? location, Map<Uri, Source>? uriToSource}) {
   try {
     int length = message.length;
     if (length < 1) {
@@ -54,7 +52,7 @@
       // empty names.
       length = 1;
     }
-    String prefix = severityPrefixes[severity];
+    String? prefix = severityPrefixes[severity];
     String messageTextTmp =
         prefix == null ? message.message : "$prefix: ${message.message}";
     if (message.tip != null) {
@@ -87,13 +85,13 @@
 
     if (message.uri != null) {
       String path =
-          relativizeUri(Uri.base, translateSdk(message.uri), isWindows);
+          relativizeUri(Uri.base, translateSdk(message.uri!), isWindows);
       int offset = message.charOffset;
-      location ??= (offset == -1 ? null : getLocation(message.uri, offset));
+      location ??= (offset == -1 ? null : getLocation(message.uri!, offset));
       if (location?.line == TreeNode.noOffset) {
         location = null;
       }
-      String sourceLine = getSourceLine(location, uriToSource);
+      String? sourceLine = getSourceLine(location, uriToSource);
       return new PlainAndColorizedString(
         formatErrorMessage(
             sourceLine, location, length, path, messageTextPlain),
@@ -115,9 +113,9 @@
   }
 }
 
-String formatErrorMessage(String sourceLine, Location location,
+String formatErrorMessage(String? sourceLine, Location? location,
     int squigglyLength, String path, String messageText) {
-  if (sourceLine == null) {
+  if (sourceLine == null || location == null) {
     sourceLine = "";
   } else if (sourceLine.isNotEmpty) {
     // TODO(askesc): Much more could be done to indent properly in the
@@ -167,7 +165,6 @@
     case Severity.ignored:
       return true;
   }
-  return unhandled("$severity", "isHidden", -1, null);
 }
 
 /// Are problems of [severity] fatal? That is, should the compiler terminate
@@ -188,7 +185,6 @@
     case Severity.context:
       return false;
   }
-  return unhandled("$severity", "shouldThrowOn", -1, null);
 }
 
 bool isCompileTimeError(Severity severity) {
diff --git a/pkg/front_end/lib/src/fasta/compiler_context.dart b/pkg/front_end/lib/src/fasta/compiler_context.dart
index 67cfc5a..a3a99e1 100644
--- a/pkg/front_end/lib/src/fasta/compiler_context.dart
+++ b/pkg/front_end/lib/src/fasta/compiler_context.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.9
-
 library fasta.compiler_context;
 
 import 'dart:async' show Zone, runZoned;
@@ -53,7 +51,7 @@
 
   FileSystem get fileSystem => options.fileSystem;
 
-  Uri cachedSdkRoot = null;
+  Uri? cachedSdkRoot = null;
 
   bool compilingPlatform = false;
 
@@ -65,7 +63,7 @@
 
   /// Report [message], for example, by printing it.
   void report(LocatedMessage message, Severity severity,
-      {List<LocatedMessage> context, List<Uri> involvedFiles}) {
+      {List<LocatedMessage>? context, List<Uri>? involvedFiles}) {
     options.report(message, severity,
         context: context, involvedFiles: involvedFiles);
   }
@@ -91,19 +89,19 @@
     if (uri.scheme != "file" && uri.scheme != "http") {
       throw new ArgumentError("Expected a file or http URI, but got: '$uri'.");
     }
-    CompilerContext context = Zone.current[compilerContextKey];
+    CompilerContext? context = Zone.current[compilerContextKey];
     if (context != null) {
       context.dependencies.add(uri);
     }
   }
 
   static CompilerContext get current {
-    CompilerContext context = Zone.current[compilerContextKey];
+    CompilerContext? context = Zone.current[compilerContextKey];
     if (context == null) {
       // Note: we throw directly and don't use internalProblem, because
       // internalProblem depends on having a compiler context available.
       String message = messageInternalProblemMissingContext.message;
-      String tip = messageInternalProblemMissingContext.tip;
+      String tip = messageInternalProblemMissingContext.tip!;
       throw "Internal problem: $message\nTip: $tip";
     }
     return context;
diff --git a/pkg/front_end/lib/src/fasta/crash.dart b/pkg/front_end/lib/src/fasta/crash.dart
index 82e44be..cc692ad 100644
--- a/pkg/front_end/lib/src/fasta/crash.dart
+++ b/pkg/front_end/lib/src/fasta/crash.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.9
-
 library fasta.crash;
 
 import 'dart:convert' show jsonEncode;
@@ -22,16 +20,16 @@
 /// Tracks the first source URI that has been read and is used as a fall-back
 /// for [reportCrash]. Should be reset between each compilation by calling
 /// [resetCrashReporting].
-Uri firstSourceUri;
+Uri? firstSourceUri;
 
 class Crash {
-  final Uri uri;
+  final Uri? uri;
 
-  final int charOffset;
+  final int? charOffset;
 
   final Object error;
 
-  final StackTrace trace;
+  final StackTrace? trace;
 
   Crash(this.uri, this.charOffset, this.error, this.trace);
 
@@ -50,7 +48,7 @@
 }
 
 Future<T> reportCrash<T>(error, StackTrace trace,
-    [Uri uri, int charOffset]) async {
+    [Uri? uri, int? charOffset]) async {
   note(String note) async {
     stderr.write(note);
     await stderr.flush();
@@ -85,12 +83,13 @@
       return new Future<T>.error(
           new Crash(uri, charOffset, error, trace), trace);
     }
+    // ignore: unnecessary_null_comparison
     if (request != null) {
       await note("\nSending crash report data");
       request.persistentConnection = false;
       request.bufferOutput = false;
-      String host = request?.connectionInfo?.remoteAddress?.host;
-      int port = request?.connectionInfo?.remotePort;
+      String? host = request.connectionInfo?.remoteAddress.host;
+      int? port = request.connectionInfo?.remotePort;
       await note(" to $host:$port");
       await request
         ..headers.contentType = ContentType.json
diff --git a/pkg/front_end/lib/src/fasta/fasta_codes.dart b/pkg/front_end/lib/src/fasta/fasta_codes.dart
index 446cd72..50f79c1 100644
--- a/pkg/front_end/lib/src/fasta/fasta_codes.dart
+++ b/pkg/front_end/lib/src/fasta/fasta_codes.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.9
-
 library fasta.codes;
 
 import 'package:_fe_analyzer_shared/src/messages/codes.dart'
diff --git a/pkg/front_end/lib/src/fasta/fasta_codes_cfe_generated.dart b/pkg/front_end/lib/src/fasta/fasta_codes_cfe_generated.dart
index aa44eb0..4efd282 100644
--- a/pkg/front_end/lib/src/fasta/fasta_codes_cfe_generated.dart
+++ b/pkg/front_end/lib/src/fasta/fasta_codes_cfe_generated.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.9
-
 // NOTE: THIS FILE IS GENERATED. DO NOT EDIT.
 //
 // Instead modify 'pkg/front_end/messages.yaml' and run
diff --git a/pkg/front_end/lib/src/fasta/hybrid_file_system.dart b/pkg/front_end/lib/src/fasta/hybrid_file_system.dart
index 10b1a47..56b1627 100644
--- a/pkg/front_end/lib/src/fasta/hybrid_file_system.dart
+++ b/pkg/front_end/lib/src/fasta/hybrid_file_system.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.9
-
 /// A memory + physical file system used to mock input for tests but provide
 /// sdk sources from disk.
 library front_end.src.hybrid_file_system;
@@ -18,7 +16,7 @@
   final MemoryFileSystem memory;
   final FileSystem physical;
 
-  HybridFileSystem(this.memory, [FileSystem _physical])
+  HybridFileSystem(this.memory, [FileSystem? _physical])
       : physical = _physical ?? StandardFileSystem.instance;
 
   @override
@@ -30,19 +28,19 @@
 /// entity.
 class HybridFileSystemEntity implements FileSystemEntity {
   final Uri uri;
-  FileSystemEntity _delegate;
+  FileSystemEntity? _delegate;
   final HybridFileSystem _fs;
 
   HybridFileSystemEntity(this.uri, this._fs);
 
   Future<FileSystemEntity> get delegate async {
-    if (_delegate != null) return _delegate;
+    if (_delegate != null) return _delegate!;
     FileSystemEntity entity = _fs.memory.entityForUri(uri);
     if (((uri.scheme != 'file' && uri.scheme != 'data') &&
             _fs.physical is StandardFileSystem) ||
         await entity.exists()) {
       _delegate = entity;
-      return _delegate;
+      return _delegate!;
     }
     return _delegate = _fs.physical.entityForUri(uri);
   }
diff --git a/pkg/front_end/lib/src/fasta/identifiers.dart b/pkg/front_end/lib/src/fasta/identifiers.dart
index f7dcd4f..422569a 100644
--- a/pkg/front_end/lib/src/fasta/identifiers.dart
+++ b/pkg/front_end/lib/src/fasta/identifiers.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.9
-
 library fasta.qualified_name;
 
 import 'package:_fe_analyzer_shared/src/scanner/scanner.dart' show Token;
@@ -21,7 +19,7 @@
 
   int get charOffset => token.charOffset;
 
-  Expression get initializer => null;
+  Expression? get initializer => null;
 
   int get endCharOffset => charOffset + name.length;
 
diff --git a/pkg/front_end/lib/src/fasta/ignored_parser_errors.dart b/pkg/front_end/lib/src/fasta/ignored_parser_errors.dart
index 04b0e4a..fbd01f9 100644
--- a/pkg/front_end/lib/src/fasta/ignored_parser_errors.dart
+++ b/pkg/front_end/lib/src/fasta/ignored_parser_errors.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.9
-
 library fasta.ignored_parser_errors;
 
 import 'package:_fe_analyzer_shared/src/parser/parser.dart' show optional;
diff --git a/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart b/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart
index 38ee51c..2e0f2fb 100644
--- a/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart
@@ -57,7 +57,6 @@
         templateCombinedMemberSignatureFailed,
         templateDuplicatedDeclaration,
         templateDuplicatedDeclarationCause,
-        templateDuplicatedDeclarationUse,
         templateMissingImplementationCause,
         templateMissingImplementationNotAbstract;
 
@@ -724,34 +723,9 @@
         ?.getMember(this);
   }
 
-  Member getDispatchTargetKernel(Class cls, Name name, bool isSetter) {
-    ClassMember classMember =
-        getNodeFromClass(cls).getDispatchTarget(name, isSetter);
-    Member member = classMember?.getMember(this);
-    if (member != null && member.isAbstract) {
-      if (cls.superclass != null) {
-        return getDispatchTargetKernel(cls.superclass, name, isSetter);
-      } else {
-        return null;
-      }
-    }
-    return member;
-  }
-
-  Member getCombinedMemberSignatureKernel(Class cls, Name name, bool isSetter,
-      int charOffset, SourceLibraryBuilder library) {
-    ClassMember declaration =
-        getNodeFromClass(cls).getInterfaceMember(name, isSetter);
-    if (declaration?.isStatic ?? true) return null;
-    if (declaration.isDuplicate) {
-      library?.addProblem(
-          templateDuplicatedDeclarationUse.withArguments(name.text),
-          charOffset,
-          name.text.length,
-          library.fileUri);
-      return null;
-    }
-    return declaration.getMember(this);
+  ClassMember getInterfaceClassMember(Class cls, Name name,
+      {bool setter: false}) {
+    return getNodeFromClass(cls).getInterfaceMember(name, setter);
   }
 
   static ClassHierarchyBuilder build(ClassBuilder objectClass,
diff --git a/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart b/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
index d6e8775..cd9256e 100644
--- a/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
@@ -2075,6 +2075,18 @@
     }
   }
 
+  /// Converts integer constant types to an int value.
+  ///
+  /// Returns [null] on unmatched [intFolder] and [value] type.
+  int _convertToInt(Constant value) {
+    if (intFolder is JsConstantIntFolder && value is DoubleConstant) {
+      return value.value.toInt();
+    } else if (intFolder is VmConstantIntFolder && value is IntConstant) {
+      return value.value;
+    }
+    return null;
+  }
+
   Constant _handleInvocation(
       Expression node, Name name, Constant receiver, List<Constant> arguments) {
     final String op = name.text;
@@ -2107,12 +2119,7 @@
           case '[]':
             if (enableConstFunctions) {
               if (intFolder.isInt(other)) {
-                int index;
-                if (intFolder is JsConstantIntFolder) {
-                  index = (other as DoubleConstant).value.toInt();
-                } else if (intFolder is VmConstantIntFolder) {
-                  index = (other as IntConstant).value;
-                }
+                int index = _convertToInt(other);
                 assert(index != null);
 
                 if (index < 0 || index >= receiver.value.length) {
@@ -2218,6 +2225,31 @@
       }
     } else if (receiver is NullConstant) {
       return createErrorConstant(node, messageConstEvalNullValue);
+    } else if (receiver is ListConstant && enableConstFunctions) {
+      if (arguments.length == 1) {
+        final Constant other = arguments[0];
+        switch (op) {
+          case '[]':
+            if (intFolder.isInt(other)) {
+              int index = _convertToInt(other);
+              assert(index != null);
+
+              if (index < 0 || index >= receiver.entries.length) {
+                return new _AbortDueToThrowConstant(
+                    node, new RangeError.index(index, receiver.entries));
+              }
+              return receiver.entries[index];
+            }
+            return createErrorConstant(
+                node,
+                templateConstEvalInvalidBinaryOperandType.withArguments(
+                    '[]',
+                    receiver,
+                    typeEnvironment.coreTypes.intNonNullableRawType,
+                    other.getType(_staticTypeContext),
+                    isNonNullableByDefault));
+        }
+      }
     } else if (receiver is MapConstant && enableConstFunctions) {
       if (arguments.length == 1) {
         final Constant other = arguments[0];
diff --git a/pkg/front_end/lib/src/fasta/kernel/implicit_type_argument.dart b/pkg/front_end/lib/src/fasta/kernel/implicit_type_argument.dart
index 3f27451..5582ac5 100644
--- a/pkg/front_end/lib/src/fasta/kernel/implicit_type_argument.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/implicit_type_argument.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE.md file.
 
-// @dart = 2.9
-
 library fasta.implicit_type_argument;
 
 import 'package:kernel/ast.dart'
@@ -35,11 +33,11 @@
 
   @override
   R accept1<R, A>(DartTypeVisitor1<R, A> v, A arg) {
-    throw unhandled("$runtimeType", "${v.runtimeType}", -1, null);
+    return unhandled("$runtimeType", "${v.runtimeType}", -1, null);
   }
 
   @override
-  visitChildren(Visitor<Object> v) {
+  visitChildren(Visitor v) {
     unhandled("$runtimeType", "${v.runtimeType}", -1, null);
   }
 
@@ -54,7 +52,7 @@
   }
 
   @override
-  bool equals(Object other, Assumptions assumptions) => this == other;
+  bool equals(Object other, Assumptions? assumptions) => this == other;
 
   @override
   void toTextInternal(AstPrinter printer) {
diff --git a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart b/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
index 69a9aa7..38e815c 100644
--- a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
@@ -67,7 +67,6 @@
       Expression node, DartType typeContext) {
     unhandled("${node.runtimeType}", "InferenceVisitor", node.fileOffset,
         inferrer.helper.uri);
-    return new ExpressionInferenceResult(const InvalidType(), node);
   }
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/kernel/type_labeler.dart b/pkg/front_end/lib/src/fasta/kernel/type_labeler.dart
index e097eca..9ac22d9 100644
--- a/pkg/front_end/lib/src/fasta/kernel/type_labeler.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/type_labeler.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.9
-
 import 'dart:convert' show json;
 
 import 'package:kernel/ast.dart';
@@ -24,7 +22,7 @@
   final Map<String, List<LabeledNode>> nameMap = <String, List<LabeledNode>>{};
   final bool printNullability;
 
-  List<Object> result;
+  List<Object> result = const [];
 
   TypeLabeler(this.printNullability);
 
@@ -34,6 +32,7 @@
   /// representation (with labels on duplicated names) by the `join()` method.
   List<Object> labelType(DartType type) {
     // TODO(askesc): Remove null check when we are completely null clean here.
+    // ignore: unnecessary_null_comparison
     if (type == null) return ["null-type"];
     result = [];
     type.accept(this);
@@ -46,6 +45,7 @@
   /// representation (with labels on duplicated names) by the `join()` method.
   List<Object> labelConstant(Constant constant) {
     // TODO(askesc): Remove null check when we are completely null clean here.
+    // ignore: unnecessary_null_comparison
     if (constant == null) return ["null-constant"];
     result = [];
     constant.accept(this);
@@ -73,7 +73,7 @@
 
   LabeledNode nameForEntity(
       TreeNode node, String nodeName, Uri importUri, Uri fileUri) {
-    List<LabeledNode> labelsForName = nameMap[nodeName];
+    List<LabeledNode>? labelsForName = nameMap[nodeName];
     if (labelsForName == null) {
       // First encountered entity with this name
       LabeledNode name =
@@ -112,8 +112,8 @@
     result.add(nameForEntity(
         typedefNode,
         typedefNode.name,
-        typedefNode?.enclosingLibrary?.importUri ?? unknownUri,
-        typedefNode?.enclosingLibrary?.fileUri ?? unknownUri));
+        typedefNode.enclosingLibrary.importUri,
+        typedefNode.enclosingLibrary.fileUri));
     if (node.typeArguments.isNotEmpty) {
       result.add("<");
       bool first = true;
@@ -150,17 +150,17 @@
   }
 
   void visitTypeParameterType(TypeParameterType node) {
-    TreeNode parent = node.parameter;
+    TreeNode? parent = node.parameter;
     while (parent is! Library && parent != null) {
       parent = parent.parent;
     }
     // Note that this can be null if, for instance, the erroneous code is not
     // actually in the tree - then we don't know where it comes from!
-    Library enclosingLibrary = parent;
+    Library? enclosingLibrary = parent as Library?;
 
     result.add(nameForEntity(
         node.parameter,
-        node.parameter.name,
+        node.parameter.name ?? '',
         enclosingLibrary == null ? unknownUri : enclosingLibrary.importUri,
         enclosingLibrary == null ? unknownUri : enclosingLibrary.fileUri));
     addNullability(node.declaredNullability);
@@ -174,7 +174,7 @@
       bool first = true;
       for (TypeParameter param in node.typeParameters) {
         if (!first) result.add(", ");
-        result.add(param.name);
+        result.add(param.name ?? '');
         if (isObject(param.bound) && param.defaultType is DynamicType) {
           // Bound was not specified, and therefore should not be printed.
         } else {
@@ -223,13 +223,14 @@
 
   void visitInterfaceType(InterfaceType node) {
     Class classNode = node.classNode;
+    // TODO(johnniwinther): Ensure enclosing libraries on classes earlier
+    // in the compiler to ensure types in error messages have context.
+    Library? enclosingLibrary = classNode.parent as Library?;
     result.add(nameForEntity(
         classNode,
         classNode.name,
-        // TODO(johnniwinther): Ensure enclosing libraries on classes earlier
-        // in the compiler to ensure types in error messages have context.
-        classNode?.enclosingLibrary?.importUri ?? unknownUri,
-        classNode?.enclosingLibrary?.fileUri ?? unknownUri));
+        enclosingLibrary?.importUri ?? unknownUri,
+        enclosingLibrary?.fileUri ?? unknownUri));
     if (node.typeArguments.isNotEmpty) {
       result.add("<");
       bool first = true;
@@ -251,11 +252,14 @@
   }
 
   void visitExtensionType(ExtensionType node) {
+    // TODO(johnniwinther): Ensure enclosing libraries on extensions earlier
+    // in the compiler to ensure types in error messages have context.
+    Library? enclosingLibrary = node.extension.parent as Library?;
     result.add(nameForEntity(
         node.extension,
         node.extension.name,
-        node.extension?.enclosingLibrary?.importUri ?? unknownUri,
-        node.extension?.enclosingLibrary?.fileUri ?? unknownUri));
+        enclosingLibrary?.importUri ?? unknownUri,
+        enclosingLibrary?.fileUri ?? unknownUri));
     if (node.typeArguments.isNotEmpty) {
       result.add("<");
       bool first = true;
@@ -289,7 +293,7 @@
 
   void visitSymbolConstant(SymbolConstant node) {
     String text = node.libraryReference != null
-        ? '#${node.libraryReference.asLibrary.importUri}::${node.name}'
+        ? '#${node.libraryReference!.asLibrary.importUri}::${node.name}'
         : '#${node.name}';
     result.add(text);
   }
@@ -307,7 +311,7 @@
       if (field.isStatic) continue;
       if (!first) result.add(", ");
       result.add("${field.name}: ");
-      node.fieldValues[field.getterReference].accept(this);
+      node.fieldValues[field.getterReference]!.accept(this);
       first = false;
     }
     result.add("}");
@@ -358,7 +362,7 @@
 
   void visitTearOffConstant(TearOffConstant node) {
     Procedure procedure = node.procedure;
-    Class classNode = procedure.enclosingClass;
+    Class? classNode = procedure.enclosingClass;
     if (classNode != null) {
       result.add(nameForEntity(
           classNode,
@@ -406,7 +410,7 @@
       this.node, this.name, this.importUri, this.fileUri, this.typeLabeler);
 
   String toString() {
-    List<LabeledNode> entityForName = typeLabeler.nameMap[name];
+    List<LabeledNode> entityForName = typeLabeler.nameMap[name]!;
     if (entityForName.length == 1) {
       return name;
     }
@@ -417,7 +421,7 @@
     if (importUri.scheme == 'dart' && importUri.path == 'core') {
       if (node is Class && denylistedCoreClasses.contains(name)) {
         // Denylisted core class. Only print if ambiguous.
-        List<LabeledNode> entityForName = typeLabeler.nameMap[name];
+        List<LabeledNode> entityForName = typeLabeler.nameMap[name]!;
         if (entityForName.length == 1) {
           return "";
         }
@@ -426,7 +430,7 @@
     if (importUri == unknownUri || node is! Class) {
       // We don't know where it comes from and/or it's not a class.
       // Only print if ambiguous.
-      List<LabeledNode> entityForName = typeLabeler.nameMap[name];
+      List<LabeledNode> entityForName = typeLabeler.nameMap[name]!;
       if (entityForName.length == 1) {
         return "";
       }
diff --git a/pkg/front_end/lib/src/fasta/messages.dart b/pkg/front_end/lib/src/fasta/messages.dart
index 3f1330a..c348215 100644
--- a/pkg/front_end/lib/src/fasta/messages.dart
+++ b/pkg/front_end/lib/src/fasta/messages.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.9
-
 library fasta.messages;
 
 import 'package:kernel/ast.dart'
@@ -15,24 +13,24 @@
 
 bool get isVerbose => CompilerContext.current.options.verbose;
 
-Location getLocation(Uri uri, int charOffset) {
+Location? getLocation(Uri uri, int charOffset) {
   return CompilerContext.current.uriToSource[uri]?.getLocation(uri, charOffset);
 }
 
-Location getLocationFromUri(Uri uri, int charOffset) {
+Location? getLocationFromUri(Uri uri, int charOffset) {
   if (charOffset == -1) return null;
   return getLocation(uri, charOffset);
 }
 
-String getSourceLine(Location location, [Map<Uri, Source> uriToSource]) {
+String? getSourceLine(Location? location, [Map<Uri, Source>? uriToSource]) {
   if (location == null) return null;
   uriToSource ??= CompilerContext.current.uriToSource;
   return uriToSource[location.file]?.getTextLine(location.line);
 }
 
-Location getLocationFromNode(TreeNode node) {
+Location? getLocationFromNode(TreeNode node) {
   if (node.enclosingComponent == null) {
-    TreeNode parent = node;
+    TreeNode? parent = node;
     while (parent != null && parent is! Library) {
       parent = parent.parent;
     }
@@ -42,7 +40,7 @@
               new Component(uriToSource: CompilerContext.current.uriToSource));
       component.libraries.add(parent);
       parent.parent = component;
-      Location result = node.location;
+      Location? result = node.location;
       component.libraries.clear();
       parent.parent = null;
       return result;
diff --git a/pkg/front_end/lib/src/fasta/modifier.dart b/pkg/front_end/lib/src/fasta/modifier.dart
index 32a6aa2..0a41ca0 100644
--- a/pkg/front_end/lib/src/fasta/modifier.dart
+++ b/pkg/front_end/lib/src/fasta/modifier.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.9
-
 library fasta.modifier;
 
 import 'problems.dart' show unhandled;
@@ -92,7 +90,7 @@
 
   toString() => "modifier(${'$kind'.substring('ModifierEnum.'.length)})";
 
-  static int toMask(List<Modifier> modifiers) {
+  static int toMask(List<Modifier>? modifiers) {
     int result = 0;
     if (modifiers == null) return result;
     for (Modifier modifier in modifiers) {
@@ -101,7 +99,7 @@
     return result;
   }
 
-  static int validateVarFinalOrConst(String lexeme) {
+  static int validateVarFinalOrConst(String? lexeme) {
     if (lexeme == null) return 0;
     if (identical('const', lexeme)) return Const.mask;
     if (identical('final', lexeme)) return Final.mask;
diff --git a/pkg/front_end/lib/src/fasta/problems.dart b/pkg/front_end/lib/src/fasta/problems.dart
index cd06b1f..00e16c9 100644
--- a/pkg/front_end/lib/src/fasta/problems.dart
+++ b/pkg/front_end/lib/src/fasta/problems.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.9
-
 library fasta.problems;
 
 import 'package:_fe_analyzer_shared/src/messages/severity.dart'
@@ -27,10 +25,14 @@
 class DebugAbort {
   final LocatedMessage message;
 
-  DebugAbort(Uri uri, int charOffset, Severity severity, StackTrace trace)
-      : message = templateInternalProblemDebugAbort
-            .withArguments(severityTexts[severity], "$trace")
-            .withLocation(uri, charOffset, noLength);
+  DebugAbort(Uri? uri, int charOffset, Severity severity, StackTrace trace)
+      : message = uri != null
+            ? templateInternalProblemDebugAbort
+                .withArguments(severityTexts[severity]!, "$trace")
+                .withLocation(uri, charOffset, noLength)
+            : templateInternalProblemDebugAbort
+                .withArguments(severityTexts[severity]!, "$trace")
+                .withoutLocation();
 
   toString() => "DebugAbort: ${message.message}";
 }
@@ -44,45 +46,52 @@
 /// ensure that there are no throws anywhere else in the codebase.
 ///
 /// Before printing the message, the string `"Internal error: "` is prepended.
-dynamic internalProblem(Message message, int charOffset, Uri uri) {
-  throw CompilerContext.current
-      .format(message.withLocation(uri, charOffset, noLength),
-          Severity.internalProblem)
-      .plain;
+Never internalProblem(Message message, int charOffset, Uri? uri) {
+  if (uri != null) {
+    throw CompilerContext.current
+        .format(message.withLocation(uri, charOffset, noLength),
+            Severity.internalProblem)
+        .plain;
+  } else {
+    throw CompilerContext.current
+        .format(message.withoutLocation(), Severity.internalProblem)
+        .plain;
+  }
 }
 
-dynamic unimplemented(String what, int charOffset, Uri uri) {
+Never unimplemented(String what, int charOffset, Uri? uri) {
   return internalProblem(
       templateInternalProblemUnimplemented.withArguments(what),
       charOffset,
       uri);
 }
 
-dynamic unhandled(String what, String where, int charOffset, Uri uri) {
+Never unhandled(String what, String where, int charOffset, Uri? uri) {
   return internalProblem(
       templateInternalProblemUnhandled.withArguments(what, where),
       charOffset,
       uri);
 }
 
-dynamic unexpected(String expected, String actual, int charOffset, Uri uri) {
+Never unexpected(String expected, String actual, int charOffset, Uri? uri) {
   return internalProblem(
       templateInternalProblemUnexpected.withArguments(expected, actual),
       charOffset,
       uri);
 }
 
-dynamic unsupported(String operation, int charOffset, Uri uri) {
+Never unsupported(String operation, int charOffset, Uri? uri) {
   return internalProblem(
       templateInternalProblemUnsupported.withArguments(operation),
       charOffset,
       uri);
 }
 
-Uri getFileUri(TreeNode node) {
+Uri? getFileUri(TreeNode node) {
+  TreeNode? parent = node;
   do {
-    if (node is FileUriNode) return node.fileUri;
-    node = node.parent;
-  } while (node is TreeNode);
+    if (parent is FileUriNode) return parent.fileUri;
+    parent = parent!.parent;
+  } while (parent is TreeNode);
   return null;
 }
diff --git a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
index 1f1cd12..3276b83 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
@@ -2723,7 +2723,6 @@
     } else {
       unhandled("${declaration.runtimeType}", "buildBuilder",
           declaration.charOffset, declaration.fileUri);
-      return;
     }
   }
 
diff --git a/pkg/front_end/lib/src/fasta/type_inference/inference_helper.dart b/pkg/front_end/lib/src/fasta/type_inference/inference_helper.dart
index 572feea..b6f3f9a 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/inference_helper.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/inference_helper.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.9
-
 import 'package:kernel/ast.dart';
 
 import 'package:kernel/core_types.dart' show CoreTypes;
@@ -18,19 +16,19 @@
   set transformSetLiterals(bool value);
 
   Expression buildProblem(Message message, int charOffset, int length,
-      {List<LocatedMessage> context, bool suppressMessage});
+      {List<LocatedMessage>? context, bool suppressMessage = false});
 
   LocatedMessage checkArgumentsForType(
       FunctionType function, Arguments arguments, int offset,
       {bool isExtensionMemberInvocation = false});
 
   void addProblem(Message message, int charOffset, int length,
-      {List<LocatedMessage> context, bool wasHandled});
+      {List<LocatedMessage>? context, bool wasHandled = false});
 
   Expression wrapInProblem(
       Expression expression, Message message, int fileOffset, int length,
-      {List<LocatedMessage> context});
+      {List<LocatedMessage>? context});
 
   String constructorNameForDiagnostics(String name,
-      {String className, bool isSuper});
+      {String? className, bool isSuper = false});
 }
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
index aa896d9..8111748 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
@@ -11,11 +11,7 @@
 
 import 'package:_fe_analyzer_shared/src/testing/id.dart';
 import 'package:_fe_analyzer_shared/src/util/link.dart';
-
-import 'package:front_end/src/fasta/kernel/internal_ast.dart';
-import 'package:front_end/src/fasta/type_inference/type_demotion.dart';
-import 'package:front_end/src/testing/id_extractor.dart';
-import 'package:front_end/src/testing/id_testing_utils.dart';
+import 'package:front_end/src/fasta/kernel/class_hierarchy_builder.dart';
 
 import 'package:kernel/ast.dart';
 import 'package:kernel/class_hierarchy.dart' show ClassHierarchy;
@@ -35,16 +31,19 @@
 
 import '../../base/nnbd_mode.dart';
 
+import '../../testing/id_extractor.dart';
+import '../../testing/id_testing_utils.dart';
+
 import '../builder/constructor_builder.dart';
 import '../builder/extension_builder.dart';
 import '../builder/member_builder.dart';
 
 import '../fasta_codes.dart';
 
+import '../kernel/class_hierarchy_builder.dart' show ClassMember;
 import '../kernel/inference_visitor.dart';
-
+import '../kernel/internal_ast.dart';
 import '../kernel/invalid_type.dart';
-
 import '../kernel/type_algorithms.dart' show hasAnyTypeVariables;
 
 import '../names.dart';
@@ -54,15 +53,11 @@
 import '../source/source_library_builder.dart' show SourceLibraryBuilder;
 
 import 'inference_helper.dart' show InferenceHelper;
-
 import 'type_constraint_gatherer.dart' show TypeConstraintGatherer;
-
+import 'type_demotion.dart';
 import 'type_inference_engine.dart';
-
 import 'type_schema.dart' show isKnown, UnknownType;
-
 import 'type_schema_elimination.dart' show greatestClosure;
-
 import 'type_schema_environment.dart'
     show
         getNamedParameterType,
@@ -4045,10 +4040,26 @@
 
   Member _getInterfaceMember(
       Class class_, Name name, bool setter, int charOffset) {
-    Member member = engine.hierarchyBuilder.getCombinedMemberSignatureKernel(
-        class_, name, setter, charOffset, library);
+    ClassMember classMember = engine.hierarchyBuilder
+        .getInterfaceClassMember(class_, name, setter: setter);
+    if (classMember != null) {
+      if (classMember.isStatic) {
+        classMember = null;
+      } else if (classMember.isDuplicate) {
+        if (!isTopLevel) {
+          library.addProblem(
+              templateDuplicatedDeclarationUse.withArguments(name.text),
+              charOffset,
+              name.text.length,
+              helper.uri);
+        }
+        classMember = null;
+      }
+    }
+    Member member = classMember?.getMember(engine.hierarchyBuilder);
     if (member == null && library.isPatch) {
-      // TODO(dmitryas): Hack for parts.
+      // TODO(johnniwinther): Injected members are currently not included
+      // in the class hierarchy builder.
       member ??=
           classHierarchy.getInterfaceMember(class_, name, setter: setter);
     }
diff --git a/pkg/front_end/lib/src/fasta/uri_translator.dart b/pkg/front_end/lib/src/fasta/uri_translator.dart
index cf294d2..c6777ee 100644
--- a/pkg/front_end/lib/src/fasta/uri_translator.dart
+++ b/pkg/front_end/lib/src/fasta/uri_translator.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.9
-
 library fasta.uri_translator;
 
 import 'package:package_config/package_config.dart';
@@ -19,7 +17,7 @@
 
   UriTranslator(this.dartLibraries, this.packages);
 
-  List<Uri> getDartPatches(String libraryName) =>
+  List<Uri>? getDartPatches(String libraryName) =>
       dartLibraries.libraryInfoFor(libraryName)?.patches;
 
   bool isPlatformImplementation(Uri uri) {
@@ -31,7 +29,7 @@
   // TODO(sigmund, ahe): consider expanding this API to include an error
   // callback, so we can provide an error location when one is available. For
   // example, if the error occurs in an `import`.
-  Uri translate(Uri uri, [bool reportMessage = true]) {
+  Uri? translate(Uri uri, [bool reportMessage = true]) {
     if (uri.scheme == "dart") return _translateDartUri(uri);
     if (uri.scheme == "package") {
       return _translatePackageUri(uri, reportMessage);
@@ -40,7 +38,8 @@
   }
 
   /// For a package uri, get the corresponding [Package].
-  Package getPackage(Uri uri) {
+  Package? getPackage(Uri uri) {
+    // ignore: unnecessary_null_comparison
     if (packages == null) return null;
     if (uri.scheme != "package") return null;
     int firstSlash = uri.path.indexOf('/');
@@ -55,16 +54,16 @@
     return dartLibraries.libraryInfoFor(libraryName)?.isSupported ?? true;
   }
 
-  Uri _translateDartUri(Uri uri) {
+  Uri? _translateDartUri(Uri uri) {
     if (!uri.isScheme('dart')) return null;
     return dartLibraries.libraryInfoFor(uri.path)?.uri;
   }
 
-  Uri _translatePackageUri(Uri uri, bool reportMessage) {
+  Uri? _translatePackageUri(Uri uri, bool reportMessage) {
     try {
       // TODO(sigmund): once we remove the `parse` API, we can ensure that
       // packages will never be null and get rid of `?` below.
-      Uri translated = packages?.resolve(uri);
+      Uri? translated = packages.resolve(uri);
       if (translated == null) {
         return (reportMessage
             ? _packageUriNotFound
@@ -82,7 +81,7 @@
     }
   }
 
-  static Uri _packageUriNotFound(Uri uri) {
+  static Uri? _packageUriNotFound(Uri uri) {
     String name = uri.pathSegments.first;
     CompilerContext.current.reportWithoutLocation(
         templatePackageNotFound.withArguments(name, uri), Severity.error);
@@ -92,7 +91,7 @@
     return null;
   }
 
-  static Uri _packageUriNotFoundNoReport(Uri uri) {
+  static Uri? _packageUriNotFoundNoReport(Uri uri) {
     return null;
   }
 }
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index 174bde3..e5d851a 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -2556,8 +2556,9 @@
 
 AnnotationOnFunctionTypeTypeVariable:
   template: "A type variable on a function type can't have annotations."
-  script:
-    - "main() { Function<@Object() T>() x; }"
+  script: |
+     // @dart=2.13
+     main() { Function<@Object() T>() x; }
 
 ExpectedEnumBody:
   template: "Expected a enum body, but got '#lexeme'."
@@ -2916,6 +2917,7 @@
 # Use this message when a duplicated declaration is used.
 DuplicatedDeclarationUse:
   template: "Can't use '#name' because it is declared more than once."
+  exampleAllowMoreCodes: true
   script:
     - main.dart: |
         // This test can't pass as tests must produce only one error message.
@@ -2935,6 +2937,18 @@
         class C {}
       lib2.dart: |
         class C {}
+    - main.dart: |
+        class C {
+          method() {}
+          method() {}
+        }
+        main() => new C().method();
+    - main.dart: |
+        class C {
+          method() {}
+          method() {}
+        }
+        var f = new C().method();
 
 DuplicatedNamePreviouslyUsed:
   template: "Can't declare '#name' because it was already used in this scope."
@@ -3022,6 +3036,8 @@
   template: "The type '#name' can't be used as supertype."
   analyzerCode: EXTENDS_NON_CLASS
   script: |
+
+
     class C extends dynamic {}
 
 SupertypeIsIllegalAliased:
@@ -4013,6 +4029,7 @@
   template: "Type variables can't have generic function types in their bounds."
   analyzerCode: GENERIC_FUNCTION_TYPE_CANNOT_BE_BOUND
   script: |
+    // @dart=2.13
     class Hest<X extends Y Function<Y>(Y)> {}
 
 VoidExpression:
@@ -4305,13 +4322,15 @@
   tip: "Try using a non-generic function type."
   analyzerCode: GENERIC_FUNCTION_CANNOT_BE_TYPE_ARGUMENT
   script:
-    - >-
+    - |
+      // @dart=2.13
       typedef F = Class<T> Function<T>(T);
       class Class<T> {}
       main() {
         Class<F> class1;
       }
-    - >-
+    - |
+      // @dart=2.13
       typedef F = Class<T> Function<T>(T);
       class Class<T> {}
       main() {
@@ -4322,7 +4341,8 @@
   template: "Generic function type '#type' inferred as a type argument."
   tip: "Try providing a non-generic function type explicitly."
   analyzerCode: GENERIC_FUNCTION_CANNOT_BE_TYPE_ARGUMENT
-  script:
+  script: |
+    // @dart=2.13
     foo<X>(X x) => null;
     bar<Y>(Y y) => null;
     main() { foo(bar); }
diff --git a/pkg/front_end/test/static_types/cfe_allowed.json b/pkg/front_end/test/static_types/cfe_allowed.json
index ca079c1..13b0b3f 100644
--- a/pkg/front_end/test/static_types/cfe_allowed.json
+++ b/pkg/front_end/test/static_types/cfe_allowed.json
@@ -18,12 +18,6 @@
     "Dynamic access of 'name'.": 2,
     "Dynamic access of 'type'.": 1
   },
-  "pkg/front_end/lib/src/fasta/crash.dart": {
-    "Dynamic access of 'trace'.": 1,
-    "Dynamic access of 'uri'.": 1,
-    "Dynamic access of 'charOffset'.": 1,
-    "Dynamic access of 'error'.": 1
-  },
   "pkg/front_end/lib/src/fasta/dill/dill_member_builder.dart": {
     "Dynamic access of 'fileUri'.": 1
   },
diff --git a/pkg/front_end/testcases/const_functions/const_functions_list.dart b/pkg/front_end/testcases/const_functions/const_functions_list.dart
index 4d16542..ee6c222 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_list.dart
+++ b/pkg/front_end/testcases/const_functions/const_functions_list.dart
@@ -93,6 +93,23 @@
   return x.runtimeType;
 }
 
+const getWithIndexVar = getWithIndexFn();
+int getWithIndexFn() {
+  const List<int> x = [1];
+  return x[0];
+}
+
+const rangeErrorCatchVar = rangeErrorCatchFn();
+int rangeErrorCatchFn() {
+  try {
+    const List<int> x = [1];
+    var v = x[1];
+  } on RangeError {
+    return 0;
+  }
+  return 1;
+}
+
 void main() {
   Expect.equals(firstVar, 1);
   Expect.equals(firstCatchVar, 0);
@@ -105,4 +122,6 @@
   Expect.equals(singleCatchVar, 0);
   Expect.equals(singleCatchVar2, 0);
   Expect.equals(typeVar, int);
+  Expect.equals(getWithIndexVar, 1);
+  Expect.equals(rangeErrorCatchVar, 0);
 }
diff --git a/pkg/front_end/testcases/const_functions/const_functions_list.dart.strong.expect b/pkg/front_end/testcases/const_functions/const_functions_list.dart.strong.expect
index b978859..3a26c41 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_list.dart.strong.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_list.dart.strong.expect
@@ -17,6 +17,8 @@
 static const field core::int singleCatchVar2 = #C2;
 static const field core::Type typeExample = #C6;
 static const field core::Type typeVar = #C6;
+static const field core::int getWithIndexVar = #C1;
+static const field core::int rangeErrorCatchVar = #C2;
 static method firstFn() → core::int {
   return (#C7).{core::Iterable::first};
 }
@@ -74,6 +76,18 @@
 static method typeFn() → core::Type {
   return (#C7).{core::Object::runtimeType};
 }
+static method getWithIndexFn() → core::int {
+  return (#C9).{core::List::[]}(0);
+}
+static method rangeErrorCatchFn() → core::int {
+  try {
+    core::int v = (#C9).{core::List::[]}(1);
+  }
+  on core::RangeError catch(no-exception-var) {
+    return 0;
+  }
+  return 1;
+}
 static method main() → void {
   exp::Expect::equals(#C1, 1);
   exp::Expect::equals(#C2, 0);
@@ -86,6 +100,8 @@
   exp::Expect::equals(#C2, 0);
   exp::Expect::equals(#C2, 0);
   exp::Expect::equals(#C6, #C6);
+  exp::Expect::equals(#C1, 1);
+  exp::Expect::equals(#C2, 0);
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/const_functions/const_functions_list.dart.strong.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_list.dart.strong.transformed.expect
index b978859..3a26c41 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_list.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_list.dart.strong.transformed.expect
@@ -17,6 +17,8 @@
 static const field core::int singleCatchVar2 = #C2;
 static const field core::Type typeExample = #C6;
 static const field core::Type typeVar = #C6;
+static const field core::int getWithIndexVar = #C1;
+static const field core::int rangeErrorCatchVar = #C2;
 static method firstFn() → core::int {
   return (#C7).{core::Iterable::first};
 }
@@ -74,6 +76,18 @@
 static method typeFn() → core::Type {
   return (#C7).{core::Object::runtimeType};
 }
+static method getWithIndexFn() → core::int {
+  return (#C9).{core::List::[]}(0);
+}
+static method rangeErrorCatchFn() → core::int {
+  try {
+    core::int v = (#C9).{core::List::[]}(1);
+  }
+  on core::RangeError catch(no-exception-var) {
+    return 0;
+  }
+  return 1;
+}
 static method main() → void {
   exp::Expect::equals(#C1, 1);
   exp::Expect::equals(#C2, 0);
@@ -86,6 +100,8 @@
   exp::Expect::equals(#C2, 0);
   exp::Expect::equals(#C2, 0);
   exp::Expect::equals(#C6, #C6);
+  exp::Expect::equals(#C1, 1);
+  exp::Expect::equals(#C2, 0);
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/const_functions/const_functions_list.dart.textual_outline.expect b/pkg/front_end/testcases/const_functions/const_functions_list.dart.textual_outline.expect
index 91be3d9..0e77dc5 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_list.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_list.dart.textual_outline.expect
@@ -23,4 +23,8 @@
 const typeExample = int;
 const typeVar = typeFn();
 Type typeFn() {}
+const getWithIndexVar = getWithIndexFn();
+int getWithIndexFn() {}
+const rangeErrorCatchVar = rangeErrorCatchFn();
+int rangeErrorCatchFn() {}
 void main() {}
diff --git a/pkg/front_end/testcases/const_functions/const_functions_list.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/const_functions/const_functions_list.dart.textual_outline_modelled.expect
index a297feb..d57d3a1 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_list.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_list.dart.textual_outline_modelled.expect
@@ -5,11 +5,13 @@
 bool isNotEmptyFn() {}
 const firstCatchVar = firstCatchFn();
 const firstVar = firstFn();
+const getWithIndexVar = getWithIndexFn();
 const isEmptyVar = isEmptyFn();
 const isNotEmptyVar = isNotEmptyFn();
 const lastCatchVar = lastCatchFn();
 const lastVar = lastFn();
 const lengthVar = lengthFn();
+const rangeErrorCatchVar = rangeErrorCatchFn();
 const singleCatchVar = singleCatchFn();
 const singleCatchVar2 = singleCatchFn2();
 const singleVar = singleFn();
@@ -17,9 +19,11 @@
 const typeVar = typeFn();
 int firstCatchFn() {}
 int firstFn() {}
+int getWithIndexFn() {}
 int lastCatchFn() {}
 int lastFn() {}
 int lengthFn() {}
+int rangeErrorCatchFn() {}
 int singleCatchFn() {}
 int singleCatchFn2() {}
 int singleFn() {}
diff --git a/pkg/front_end/testcases/const_functions/const_functions_list.dart.weak.expect b/pkg/front_end/testcases/const_functions/const_functions_list.dart.weak.expect
index e5b0a71..e3fdeb2 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_list.dart.weak.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_list.dart.weak.expect
@@ -17,6 +17,8 @@
 static const field core::int singleCatchVar2 = #C2;
 static const field core::Type typeExample = #C6;
 static const field core::Type typeVar = #C6;
+static const field core::int getWithIndexVar = #C1;
+static const field core::int rangeErrorCatchVar = #C2;
 static method firstFn() → core::int {
   return (#C7).{core::Iterable::first};
 }
@@ -74,6 +76,18 @@
 static method typeFn() → core::Type {
   return (#C7).{core::Object::runtimeType};
 }
+static method getWithIndexFn() → core::int {
+  return (#C9).{core::List::[]}(0);
+}
+static method rangeErrorCatchFn() → core::int {
+  try {
+    core::int v = (#C9).{core::List::[]}(1);
+  }
+  on core::RangeError catch(no-exception-var) {
+    return 0;
+  }
+  return 1;
+}
 static method main() → void {
   exp::Expect::equals(#C1, 1);
   exp::Expect::equals(#C2, 0);
@@ -86,6 +100,8 @@
   exp::Expect::equals(#C2, 0);
   exp::Expect::equals(#C2, 0);
   exp::Expect::equals(#C6, #C6);
+  exp::Expect::equals(#C1, 1);
+  exp::Expect::equals(#C2, 0);
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/const_functions/const_functions_list.dart.weak.outline.expect b/pkg/front_end/testcases/const_functions/const_functions_list.dart.weak.outline.expect
index dcd0734..70812a7 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_list.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_list.dart.weak.outline.expect
@@ -16,6 +16,8 @@
 static const field core::int singleCatchVar2 = self::singleCatchFn2();
 static const field core::Type typeExample = core::int;
 static const field core::Type typeVar = self::typeFn();
+static const field core::int getWithIndexVar = self::getWithIndexFn();
+static const field core::int rangeErrorCatchVar = self::rangeErrorCatchFn();
 static method firstFn() → core::int
   ;
 static method firstCatchFn() → core::int
@@ -38,10 +40,14 @@
   ;
 static method typeFn() → core::Type
   ;
+static method getWithIndexFn() → core::int
+  ;
+static method rangeErrorCatchFn() → core::int
+  ;
 static method main() → void
   ;
 
 
 Extra constant evaluation status:
 Evaluated: TypeLiteral @ org-dartlang-testcase:///const_functions_list.dart:89:21 -> TypeLiteralConstant(int*)
-Extra constant evaluation: evaluated: 12, effectively constant: 1
+Extra constant evaluation: evaluated: 14, effectively constant: 1
diff --git a/pkg/front_end/testcases/const_functions/const_functions_list.dart.weak.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_list.dart.weak.transformed.expect
index e5b0a71..e3fdeb2 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_list.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_list.dart.weak.transformed.expect
@@ -17,6 +17,8 @@
 static const field core::int singleCatchVar2 = #C2;
 static const field core::Type typeExample = #C6;
 static const field core::Type typeVar = #C6;
+static const field core::int getWithIndexVar = #C1;
+static const field core::int rangeErrorCatchVar = #C2;
 static method firstFn() → core::int {
   return (#C7).{core::Iterable::first};
 }
@@ -74,6 +76,18 @@
 static method typeFn() → core::Type {
   return (#C7).{core::Object::runtimeType};
 }
+static method getWithIndexFn() → core::int {
+  return (#C9).{core::List::[]}(0);
+}
+static method rangeErrorCatchFn() → core::int {
+  try {
+    core::int v = (#C9).{core::List::[]}(1);
+  }
+  on core::RangeError catch(no-exception-var) {
+    return 0;
+  }
+  return 1;
+}
 static method main() → void {
   exp::Expect::equals(#C1, 1);
   exp::Expect::equals(#C2, 0);
@@ -86,6 +100,8 @@
   exp::Expect::equals(#C2, 0);
   exp::Expect::equals(#C2, 0);
   exp::Expect::equals(#C6, #C6);
+  exp::Expect::equals(#C1, 1);
+  exp::Expect::equals(#C2, 0);
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/const_functions/const_functions_list_error.dart b/pkg/front_end/testcases/const_functions/const_functions_list_error.dart
index b2e29ac..7112539 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_list_error.dart
+++ b/pkg/front_end/testcases/const_functions/const_functions_list_error.dart
@@ -36,4 +36,22 @@
   return x.invalidProperty;
 }
 
+const getWithIndexException = getWithIndexExceptionFn();
+int getWithIndexExceptionFn() {
+  const List<int> x = [1];
+  return x[1];
+}
+
+const getWithIndexException2 = getWithIndexExceptionFn2();
+int getWithIndexExceptionFn2() {
+  const List<int> x = [1];
+  return x[-1];
+}
+
+const getWithIndexException3 = getWithIndexExceptionFn3();
+int getWithIndexExceptionFn3() {
+  const List<int> x = [1];
+  return x[0.1];
+}
+
 void main() {}
diff --git a/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.strong.expect b/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.strong.expect
index 8f1cc49..c0f7a01 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.strong.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.strong.expect
@@ -8,6 +8,10 @@
 //   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();
 //                        ^
@@ -36,6 +40,20 @@
 //   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];
+//           ^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -50,6 +68,11 @@
 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 method firstExceptionFn() → core::int {
   return (#C1).{core::Iterable::first};
 }
@@ -69,6 +92,17 @@
   return x.invalidProperty;
            ^^^^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
 }
+static method getWithIndexExceptionFn() → core::int {
+  return (#C5).{core::List::[]}(1);
+}
+static method getWithIndexExceptionFn2() → core::int {
+  return (#C5).{core::List::[]}(1.{core::int::unary-}());
+}
+static method getWithIndexExceptionFn3() → core::int {
+  return (#C5).{core::List::[]}(let final Never #t1 = 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);
+}
 static method main() → void {}
 
 constants  {
@@ -76,4 +110,5 @@
   #C2 = 1
   #C3 = 2
   #C4 = <core::int>[#C2, #C3]
+  #C5 = <core::int>[#C2]
 }
diff --git a/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.strong.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.strong.transformed.expect
index 8ec1037..e279288 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.strong.transformed.expect
@@ -8,6 +8,10 @@
 //   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();
 //                        ^
@@ -36,6 +40,20 @@
 //   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];
+//           ^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -50,6 +68,11 @@
 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 method firstExceptionFn() → core::int {
   return (#C1).{core::Iterable::first};
 }
@@ -69,6 +92,17 @@
   return x.invalidProperty;
            ^^^^^^^^^^^^^^^";
 }
+static method getWithIndexExceptionFn() → core::int {
+  return (#C5).{core::List::[]}(1);
+}
+static method getWithIndexExceptionFn2() → core::int {
+  return (#C5).{core::List::[]}(1.{core::int::unary-}());
+}
+static method getWithIndexExceptionFn3() → core::int {
+  return (#C5).{core::List::[]}(let final Never #t1 = 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);
+}
 static method main() → void {}
 
 constants  {
@@ -76,4 +110,9 @@
   #C2 = 1
   #C3 = 2
   #C4 = <core::int>[#C2, #C3]
+  #C5 = <core::int>[#C2]
 }
+
+Extra constant evaluation status:
+Evaluated: MethodInvocation @ org-dartlang-testcase:///const_functions_list_error.dart:48:12 -> IntConstant(-1)
+Extra constant evaluation: evaluated: 10, effectively constant: 1
diff --git a/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.textual_outline.expect b/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.textual_outline.expect
index 4697c853..0305a22 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.textual_outline.expect
@@ -10,4 +10,10 @@
 int singleExceptionMultiFn() {}
 const invalidProperty = invalidPropertyFn();
 int invalidPropertyFn() {}
+const getWithIndexException = getWithIndexExceptionFn();
+int getWithIndexExceptionFn() {}
+const getWithIndexException2 = getWithIndexExceptionFn2();
+int getWithIndexExceptionFn2() {}
+const getWithIndexException3 = getWithIndexExceptionFn3();
+int getWithIndexExceptionFn3() {}
 void main() {}
diff --git a/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.textual_outline_modelled.expect
index c41226a..6ad769d 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.textual_outline_modelled.expect
@@ -1,11 +1,17 @@
 import "package:expect/expect.dart";
 
 const firstException = firstExceptionFn();
+const getWithIndexException = getWithIndexExceptionFn();
+const getWithIndexException2 = getWithIndexExceptionFn2();
+const getWithIndexException3 = getWithIndexExceptionFn3();
 const invalidProperty = invalidPropertyFn();
 const lastException = lastExceptionFn();
 const singleException = singleExceptionFn();
 const singleExceptionMulti = singleExceptionMultiFn();
 int firstExceptionFn() {}
+int getWithIndexExceptionFn() {}
+int getWithIndexExceptionFn2() {}
+int getWithIndexExceptionFn3() {}
 int invalidPropertyFn() {}
 int lastExceptionFn() {}
 int singleExceptionFn() {}
diff --git a/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.weak.expect b/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.weak.expect
index 6d2f2a4..f063521 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.weak.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.weak.expect
@@ -8,6 +8,10 @@
 //   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();
 //                        ^
@@ -36,6 +40,20 @@
 //   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];
+//           ^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -50,6 +68,11 @@
 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 method firstExceptionFn() → core::int {
   return (#C1).{core::Iterable::first};
 }
@@ -69,6 +92,17 @@
   return x.invalidProperty;
            ^^^^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
 }
+static method getWithIndexExceptionFn() → core::int {
+  return (#C5).{core::List::[]}(1);
+}
+static method getWithIndexExceptionFn2() → core::int {
+  return (#C5).{core::List::[]}(1.{core::int::unary-}());
+}
+static method getWithIndexExceptionFn3() → core::int {
+  return (#C5).{core::List::[]}(let final Never #t1 = 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);
+}
 static method main() → void {}
 
 constants  {
@@ -76,4 +110,5 @@
   #C2 = 1
   #C3 = 2
   #C4 = <core::int*>[#C2, #C3]
+  #C5 = <core::int*>[#C2]
 }
diff --git a/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.weak.outline.expect b/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.weak.outline.expect
index 49a82fb..85d4fbd 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.weak.outline.expect
@@ -9,6 +9,9 @@
 static const field core::int singleException = self::singleExceptionFn();
 static const field core::int singleExceptionMulti = self::singleExceptionMultiFn();
 static const field core::int invalidProperty = self::invalidPropertyFn();
+static const field core::int getWithIndexException = self::getWithIndexExceptionFn();
+static const field core::int getWithIndexException2 = self::getWithIndexExceptionFn2();
+static const field core::int getWithIndexException3 = self::getWithIndexExceptionFn3();
 static method firstExceptionFn() → core::int
   ;
 static method lastExceptionFn() → core::int
@@ -19,5 +22,11 @@
   ;
 static method invalidPropertyFn() → core::int
   ;
+static method getWithIndexExceptionFn() → core::int
+  ;
+static method getWithIndexExceptionFn2() → core::int
+  ;
+static method getWithIndexExceptionFn3() → core::int
+  ;
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.weak.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.weak.transformed.expect
index 54d1e2b..83813a5 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.weak.transformed.expect
@@ -8,6 +8,10 @@
 //   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();
 //                        ^
@@ -36,6 +40,20 @@
 //   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];
+//           ^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -50,6 +68,11 @@
 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 method firstExceptionFn() → core::int {
   return (#C1).{core::Iterable::first};
 }
@@ -69,6 +92,17 @@
   return x.invalidProperty;
            ^^^^^^^^^^^^^^^";
 }
+static method getWithIndexExceptionFn() → core::int {
+  return (#C5).{core::List::[]}(1);
+}
+static method getWithIndexExceptionFn2() → core::int {
+  return (#C5).{core::List::[]}(1.{core::int::unary-}());
+}
+static method getWithIndexExceptionFn3() → core::int {
+  return (#C5).{core::List::[]}(let final Never #t1 = 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);
+}
 static method main() → void {}
 
 constants  {
@@ -76,4 +110,9 @@
   #C2 = 1
   #C3 = 2
   #C4 = <core::int*>[#C2, #C3]
+  #C5 = <core::int*>[#C2]
 }
+
+Extra constant evaluation status:
+Evaluated: MethodInvocation @ org-dartlang-testcase:///const_functions_list_error.dart:48:12 -> IntConstant(-1)
+Extra constant evaluation: evaluated: 10, effectively constant: 1
diff --git a/pkg/front_end/testcases/general/function_type_parameter.dart b/pkg/front_end/testcases/general/function_type_parameter.dart
index a9cb3ee..4e2e409 100644
--- a/pkg/front_end/testcases/general/function_type_parameter.dart
+++ b/pkg/front_end/testcases/general/function_type_parameter.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart=2.13
+
 class A {
   const A();
 }
diff --git a/pkg/front_end/testcases/general/function_type_parameter.dart.textual_outline.expect b/pkg/front_end/testcases/general/function_type_parameter.dart.textual_outline.expect
index 31291f6..9af2a2f 100644
--- a/pkg/front_end/testcases/general/function_type_parameter.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/function_type_parameter.dart.textual_outline.expect
@@ -1,3 +1,4 @@
+// @dart = 2.13
 class A {
   const A();
 }
diff --git a/pkg/front_end/testcases/general/function_type_parameter.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/function_type_parameter.dart.textual_outline_modelled.expect
index e028d49..7c7763b3 100644
--- a/pkg/front_end/testcases/general/function_type_parameter.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/function_type_parameter.dart.textual_outline_modelled.expect
@@ -1,3 +1,4 @@
+// @dart = 2.13
 class A {
   const A();
 }
diff --git a/pkg/front_end/testcases/general/function_type_parameter.dart.weak.expect b/pkg/front_end/testcases/general/function_type_parameter.dart.weak.expect
index 35519c9..9c2602d 100644
--- a/pkg/front_end/testcases/general/function_type_parameter.dart.weak.expect
+++ b/pkg/front_end/testcases/general/function_type_parameter.dart.weak.expect
@@ -2,27 +2,27 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/function_type_parameter.dart:9:20: Error: A type variable on a function type can't have annotations.
+// 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:11:32: Error: A type variable on a function type can't have annotations.
+// 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:17:33: Error: A type variable on a function type can't have annotations.
+// 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:19:42: Error: A type variable on a function type can't have annotations.
+// 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:19:13: Error: Type variables can't have generic function types in their bounds.
+// 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:24:22: Error: A type variable on a function type can't have annotations.
+// 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;
 //                      ^
 //
@@ -56,5 +56,5 @@
 
 Constructor coverage from constants:
 org-dartlang-testcase:///function_type_parameter.dart:
-- A. (from org-dartlang-testcase:///function_type_parameter.dart:6:9)
+- 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_parameter.dart.weak.outline.expect b/pkg/front_end/testcases/general/function_type_parameter.dart.weak.outline.expect
index 0ce97a7..962cf4d 100644
--- a/pkg/front_end/testcases/general/function_type_parameter.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/function_type_parameter.dart.weak.outline.expect
@@ -2,23 +2,23 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/function_type_parameter.dart:9:20: Error: A type variable on a function type can't have annotations.
+// 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:11:32: Error: A type variable on a function type can't have annotations.
+// 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:17:33: Error: A type variable on a function type can't have annotations.
+// 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:19:42: Error: A type variable on a function type can't have annotations.
+// 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:19:13: Error: Type variables can't have generic function types in their bounds.
+// 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)> {}
 //             ^
 //
@@ -46,6 +46,6 @@
 
 
 Extra constant evaluation status:
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///function_type_parameter.dart:13:17 -> InstanceConstant(const A{})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///function_type_parameter.dart:15:15 -> InstanceConstant(const A{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///function_type_parameter.dart:15:17 -> InstanceConstant(const A{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///function_type_parameter.dart:17:15 -> InstanceConstant(const A{})
 Extra constant evaluation: evaluated: 2, effectively constant: 2
diff --git a/pkg/front_end/testcases/general/function_type_parameter.dart.weak.transformed.expect b/pkg/front_end/testcases/general/function_type_parameter.dart.weak.transformed.expect
index 35519c9..9c2602d 100644
--- a/pkg/front_end/testcases/general/function_type_parameter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/function_type_parameter.dart.weak.transformed.expect
@@ -2,27 +2,27 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/function_type_parameter.dart:9:20: Error: A type variable on a function type can't have annotations.
+// 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:11:32: Error: A type variable on a function type can't have annotations.
+// 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:17:33: Error: A type variable on a function type can't have annotations.
+// 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:19:42: Error: A type variable on a function type can't have annotations.
+// 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:19:13: Error: Type variables can't have generic function types in their bounds.
+// 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:24:22: Error: A type variable on a function type can't have annotations.
+// 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;
 //                      ^
 //
@@ -56,5 +56,5 @@
 
 Constructor coverage from constants:
 org-dartlang-testcase:///function_type_parameter.dart:
-- A. (from org-dartlang-testcase:///function_type_parameter.dart:6:9)
+- 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/issue45330.dart b/pkg/front_end/testcases/general/issue45330.dart
index 95ebfd0..9abd261 100644
--- a/pkg/front_end/testcases/general/issue45330.dart
+++ b/pkg/front_end/testcases/general/issue45330.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart=2.13
+
 part 'issue45330_lib.dart';
 
 void genericMethod<T>() {}
diff --git a/pkg/front_end/testcases/general/issue45330.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue45330.dart.textual_outline.expect
index 23719be..163c7be 100644
--- a/pkg/front_end/testcases/general/issue45330.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/issue45330.dart.textual_outline.expect
@@ -1,3 +1,4 @@
+// @dart = 2.13
 part 'issue45330_lib.dart';
 
 void genericMethod<T>() {}
diff --git a/pkg/front_end/testcases/general/issue45330.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue45330.dart.textual_outline_modelled.expect
index eb6bf12..d75e4ed 100644
--- a/pkg/front_end/testcases/general/issue45330.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/issue45330.dart.textual_outline_modelled.expect
@@ -1,3 +1,4 @@
+// @dart = 2.13
 part 'issue45330_lib.dart';
 
 main() {}
diff --git a/pkg/front_end/testcases/general/issue45330.dart.weak.expect b/pkg/front_end/testcases/general/issue45330.dart.weak.expect
index 22c456a..56fe32f 100644
--- a/pkg/front_end/testcases/general/issue45330.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue45330.dart.weak.expect
@@ -2,22 +2,22 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/issue45330.dart:10:31: Error: Type 'T' is a bound of itself via 'T'.
+// 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:10:3: Error: A generic function type can't be used as a type argument.
+// 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:35:31: Error: Type 'T' is a bound of itself via '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:35:3: Error: A generic function type can't be used as a type argument.
+// 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>()>();
 //   ^
diff --git a/pkg/front_end/testcases/general/issue45330.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue45330.dart.weak.transformed.expect
index 22c456a..56fe32f 100644
--- a/pkg/front_end/testcases/general/issue45330.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue45330.dart.weak.transformed.expect
@@ -2,22 +2,22 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/issue45330.dart:10:31: Error: Type 'T' is a bound of itself via 'T'.
+// 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:10:3: Error: A generic function type can't be used as a type argument.
+// 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:35:31: Error: Type 'T' is a bound of itself via '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:35:3: Error: A generic function type can't be used as a type argument.
+// 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>()>();
 //   ^
diff --git a/pkg/front_end/testcases/general/issue45330_lib.dart b/pkg/front_end/testcases/general/issue45330_lib.dart
index 1772937..93b958b 100644
--- a/pkg/front_end/testcases/general/issue45330_lib.dart
+++ b/pkg/front_end/testcases/general/issue45330_lib.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart=2.13
+
 // Long comment to increase error offset.
 // Long comment to increase error offset.
 // Long comment to increase error offset.
diff --git a/pkg/front_end/testcases/nnbd/issue34803.dart b/pkg/front_end/testcases/nnbd/issue34803.dart
index ec6eda3..0069fc6d 100644
--- a/pkg/front_end/testcases/nnbd/issue34803.dart
+++ b/pkg/front_end/testcases/nnbd/issue34803.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart=2.13
+
 class A<X extends G<num>> {}
 typedef G<X> = void Function<Y extends X>();
 
diff --git a/pkg/front_end/testcases/nnbd/issue34803.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue34803.dart.strong.expect
index 7cf7baa..fc4163c 100644
--- a/pkg/front_end/testcases/nnbd/issue34803.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue34803.dart.strong.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/issue34803.dart:5:9: Error: Type variables can't have generic function types in their bounds.
+// 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>> {}
 //         ^
 //
diff --git a/pkg/front_end/testcases/nnbd/issue34803.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue34803.dart.strong.transformed.expect
index 7cf7baa..fc4163c 100644
--- a/pkg/front_end/testcases/nnbd/issue34803.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue34803.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/issue34803.dart:5:9: Error: Type variables can't have generic function types in their bounds.
+// 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>> {}
 //         ^
 //
diff --git a/pkg/front_end/testcases/nnbd/issue34803.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd/issue34803.dart.textual_outline.expect
index 3d362ac..987cefd 100644
--- a/pkg/front_end/testcases/nnbd/issue34803.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue34803.dart.textual_outline.expect
@@ -1,3 +1,4 @@
+// @dart = 2.13
 class A<X extends G<num>> {}
 
 typedef G<X> = void Function<Y extends X>();
diff --git a/pkg/front_end/testcases/nnbd/issue34803.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd/issue34803.dart.textual_outline_modelled.expect
index 92dc404..ff10684 100644
--- a/pkg/front_end/testcases/nnbd/issue34803.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/nnbd/issue34803.dart.textual_outline_modelled.expect
@@ -1,3 +1,4 @@
+// @dart = 2.13
 class A<X extends G<num>> {}
 
 main() {}
diff --git a/pkg/front_end/testcases/nnbd/issue34803.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue34803.dart.weak.expect
index 7cf7baa..fc4163c 100644
--- a/pkg/front_end/testcases/nnbd/issue34803.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue34803.dart.weak.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/issue34803.dart:5:9: Error: Type variables can't have generic function types in their bounds.
+// 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>> {}
 //         ^
 //
diff --git a/pkg/front_end/testcases/nnbd/issue34803.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/issue34803.dart.weak.outline.expect
index 81ae317..9735668 100644
--- a/pkg/front_end/testcases/nnbd/issue34803.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue34803.dart.weak.outline.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/issue34803.dart:5:9: Error: Type variables can't have generic function types in their bounds.
+// 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>> {}
 //         ^
 //
diff --git a/pkg/front_end/testcases/nnbd/issue34803.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue34803.dart.weak.transformed.expect
index 7cf7baa..fc4163c 100644
--- a/pkg/front_end/testcases/nnbd/issue34803.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue34803.dart.weak.transformed.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/issue34803.dart:5:9: Error: Type variables can't have generic function types in their bounds.
+// 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>> {}
 //         ^
 //
diff --git a/pkg/front_end/testcases/nnbd_mixed/cyclic_typedef.dart b/pkg/front_end/testcases/nnbd_mixed/cyclic_typedef.dart
index 11be33b..142da10 100644
--- a/pkg/front_end/testcases/nnbd_mixed/cyclic_typedef.dart
+++ b/pkg/front_end/testcases/nnbd_mixed/cyclic_typedef.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart=2.13
+
 // Derived from
 // instantiate_to_bound/non_simple_class_parameterized_typedef_cycle
 
diff --git a/pkg/front_end/testcases/nnbd_mixed/cyclic_typedef.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/cyclic_typedef.dart.textual_outline.expect
index a72af38..89ae237 100644
--- a/pkg/front_end/testcases/nnbd_mixed/cyclic_typedef.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/cyclic_typedef.dart.textual_outline.expect
@@ -1,3 +1,4 @@
+// @dart = 2.13
 import 'cyclic_typedef_lib.dart';
 
 class Hest2<TypeX extends Fisk2> {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/cyclic_typedef.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/cyclic_typedef.dart.textual_outline_modelled.expect
index d03bf62..6813f4a 100644
--- a/pkg/front_end/testcases/nnbd_mixed/cyclic_typedef.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/cyclic_typedef.dart.textual_outline_modelled.expect
@@ -1,3 +1,4 @@
+// @dart = 2.13
 import 'cyclic_typedef_lib.dart';
 
 class Hest2<TypeX extends Fisk2> {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/cyclic_typedef.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/cyclic_typedef.dart.weak.expect
index c05d772..83322f3 100644
--- a/pkg/front_end/testcases/nnbd_mixed/cyclic_typedef.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/cyclic_typedef.dart.weak.expect
@@ -2,25 +2,25 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd_mixed/cyclic_typedef.dart:10: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'.
+// 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:10:13: Context: Bound of this variable references raw type '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:12:31: Context: Bound of this variable references raw type 'Hest2'.
+// 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:12: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'.
+// 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:12:31: Context: Bound of this variable references raw type '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:10:13: Context: Bound of this variable references raw type 'Fisk1'.
+// 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> {}
 //             ^^^^^
 //
@@ -41,7 +41,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd_mixed/cyclic_typedef_lib.dart:10:13: Error: Type variables can't have generic function types in their bounds.
+// 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> {}
 //             ^^^^^
 //
diff --git a/pkg/front_end/testcases/nnbd_mixed/cyclic_typedef.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/cyclic_typedef.dart.weak.outline.expect
index 13ca055..429487d 100644
--- a/pkg/front_end/testcases/nnbd_mixed/cyclic_typedef.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/cyclic_typedef.dart.weak.outline.expect
@@ -2,25 +2,25 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd_mixed/cyclic_typedef.dart:10: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'.
+// 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:10:13: Context: Bound of this variable references raw type '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:12:31: Context: Bound of this variable references raw type 'Hest2'.
+// 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:12: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'.
+// 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:12:31: Context: Bound of this variable references raw type '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:10:13: Context: Bound of this variable references raw type 'Fisk1'.
+// 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> {}
 //             ^^^^^
 //
@@ -41,7 +41,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd_mixed/cyclic_typedef_lib.dart:10:13: Error: Type variables can't have generic function types in their bounds.
+// 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> {}
 //             ^^^^^
 //
diff --git a/pkg/front_end/testcases/nnbd_mixed/cyclic_typedef.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/cyclic_typedef.dart.weak.transformed.expect
index c05d772..83322f3 100644
--- a/pkg/front_end/testcases/nnbd_mixed/cyclic_typedef.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/cyclic_typedef.dart.weak.transformed.expect
@@ -2,25 +2,25 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd_mixed/cyclic_typedef.dart:10: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'.
+// 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:10:13: Context: Bound of this variable references raw type '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:12:31: Context: Bound of this variable references raw type 'Hest2'.
+// 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:12: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'.
+// 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:12:31: Context: Bound of this variable references raw type '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:10:13: Context: Bound of this variable references raw type 'Fisk1'.
+// 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> {}
 //             ^^^^^
 //
@@ -41,7 +41,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd_mixed/cyclic_typedef_lib.dart:10:13: Error: Type variables can't have generic function types in their bounds.
+// 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> {}
 //             ^^^^^
 //
diff --git a/pkg/front_end/testcases/nnbd_mixed/cyclic_typedef_lib.dart b/pkg/front_end/testcases/nnbd_mixed/cyclic_typedef_lib.dart
index 46e47dc..fa70b9c 100644
--- a/pkg/front_end/testcases/nnbd_mixed/cyclic_typedef_lib.dart
+++ b/pkg/front_end/testcases/nnbd_mixed/cyclic_typedef_lib.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart=2.13
+
 // Derived from
 // instantiate_to_bound/non_simple_class_parameterized_typedef_cycle
 
diff --git a/pkg/front_end/tool/_fasta/generate_messages.dart b/pkg/front_end/tool/_fasta/generate_messages.dart
index 23a3487..ba52246 100644
--- a/pkg/front_end/tool/_fasta/generate_messages.dart
+++ b/pkg/front_end/tool/_fasta/generate_messages.dart
@@ -81,8 +81,6 @@
   cfeMessages.writeln(preamble1);
   cfeMessages.writeln("""
 
-// @dart = 2.9
-
 """);
   cfeMessages.writeln(preamble2);
   cfeMessages.writeln("""
diff --git a/runtime/tests/vm/dart/regress_lsl_with_constant_test.dart b/runtime/tests/vm/dart/regress_lsl_with_constant_test.dart
new file mode 100644
index 0000000..368a98b
--- /dev/null
+++ b/runtime/tests/vm/dart/regress_lsl_with_constant_test.dart
@@ -0,0 +1,28 @@
+// 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.
+
+// Regression test which checks that shift left with constant operand compiles
+// correctly even if narrowed to Int32 shift.
+
+import 'dart:typed_data';
+
+import 'package:expect/expect.dart';
+
+const int N = 10;
+
+@pragma('vm:never-inline')
+void test(Int32List v) {
+  // The shape of the code here is choosen to trigger Int64->Int32
+  // narrowing in the range analysis.
+  v[0] = (v[0] & 0xFF) << (N - 1);
+}
+
+void main() {
+  final list = Int32List(1);
+  for (var i = 0; i < 10; i++) {
+    list[0] = i;
+    test(list);
+    Expect.equals(i << 9, list[0]);
+  }
+}
diff --git a/runtime/tests/vm/dart_2/regress_lsl_with_constant_test.dart b/runtime/tests/vm/dart_2/regress_lsl_with_constant_test.dart
new file mode 100644
index 0000000..368a98b
--- /dev/null
+++ b/runtime/tests/vm/dart_2/regress_lsl_with_constant_test.dart
@@ -0,0 +1,28 @@
+// 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.
+
+// Regression test which checks that shift left with constant operand compiles
+// correctly even if narrowed to Int32 shift.
+
+import 'dart:typed_data';
+
+import 'package:expect/expect.dart';
+
+const int N = 10;
+
+@pragma('vm:never-inline')
+void test(Int32List v) {
+  // The shape of the code here is choosen to trigger Int64->Int32
+  // narrowing in the range analysis.
+  v[0] = (v[0] & 0xFF) << (N - 1);
+}
+
+void main() {
+  final list = Int32List(1);
+  for (var i = 0; i < 10; i++) {
+    list[0] = i;
+    test(list);
+    Expect.equals(i << 9, list[0]);
+  }
+}
diff --git a/runtime/vm/compiler/backend/il.cc b/runtime/vm/compiler/backend/il.cc
index 85561c4..3e59fa6 100644
--- a/runtime/vm/compiler/backend/il.cc
+++ b/runtime/vm/compiler/backend/il.cc
@@ -3302,6 +3302,21 @@
 Definition* IntConverterInstr::Canonicalize(FlowGraph* flow_graph) {
   if (!HasUses()) return NULL;
 
+  // Fold IntConverter({Unboxed}Constant(...)) to UnboxedConstant.
+  if (auto constant = value()->definition()->AsConstant()) {
+    if (from() != kUntagged && to() != kUntagged &&
+        constant->representation() == from() && constant->value().IsInteger()) {
+      const int64_t value = Integer::Cast(constant->value()).AsInt64Value();
+      const int64_t result =
+          Evaluator::TruncateTo(Evaluator::TruncateTo(value, from()), to());
+      if (is_truncating() || (value == result)) {
+        auto& box = Integer::Handle(Integer::New(result, Heap::kOld));
+        box ^= box.Canonicalize(flow_graph->thread());
+        return flow_graph->GetConstant(box, to());
+      }
+    }
+  }
+
   IntConverterInstr* box_defn = value()->definition()->AsIntConverter();
   if ((box_defn != NULL) && (box_defn->representation() == from())) {
     // If the first convertion can erase bits (or deoptimize) we can't
diff --git a/runtime/vm/compiler/backend/il_printer.cc b/runtime/vm/compiler/backend/il_printer.cc
index b9907ec..6c903ec 100644
--- a/runtime/vm/compiler/backend/il_printer.cc
+++ b/runtime/vm/compiler/backend/il_printer.cc
@@ -845,6 +845,8 @@
     f->AddString(" {");
     for (intptr_t i = 0; i < defns.length(); ++i) {
       Definition* def = defns[i];
+      // Skip constants which are not used in the graph.
+      if (def->IsConstant() && !def->HasUses()) continue;
       f->AddString("\n      ");
       def->PrintTo(f);
     }
diff --git a/tests/language/const_functions/const_functions_list_error_test.dart b/tests/language/const_functions/const_functions_list_error_test.dart
index 64a05e7..45e6f96 100644
--- a/tests/language/const_functions/const_functions_list_error_test.dart
+++ b/tests/language/const_functions/const_functions_list_error_test.dart
@@ -54,3 +54,32 @@
   // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_GETTER
   // [cfe] The getter 'invalidProperty' isn't defined for the class 'List<int>'.
 }
+
+const getWithIndexException = getWithIndexExceptionFn();
+//                            ^^^^^^^^^^^^^^^^^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
+// [cfe] Constant evaluation error:
+int getWithIndexExceptionFn() {
+  const List<int> x = [1];
+  return x[1];
+}
+
+const getWithIndexException2 = getWithIndexExceptionFn2();
+//                             ^^^^^^^^^^^^^^^^^^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
+// [cfe] Constant evaluation error:
+int getWithIndexExceptionFn2() {
+  const List<int> x = [1];
+  return x[-1];
+}
+
+const getWithIndexException3 = getWithIndexExceptionFn3();
+//                             ^^^^^^^^^^^^^^^^^^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
+int getWithIndexExceptionFn3() {
+  const List<int> x = [1];
+  return x[0.1];
+  //       ^^^
+  // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
+  // [cfe] A value of type 'double' can't be assigned to a variable of type 'int'.
+}
diff --git a/tests/language/const_functions/const_functions_list_test.dart b/tests/language/const_functions/const_functions_list_test.dart
index 0810d57..31746a5 100644
--- a/tests/language/const_functions/const_functions_list_test.dart
+++ b/tests/language/const_functions/const_functions_list_test.dart
@@ -137,6 +137,27 @@
   return x.runtimeType;
 }
 
+const getWithIndexVar = getWithIndexFn();
+//                      ^^^^^^^^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
+int getWithIndexFn() {
+  const List<int> x = [1];
+  return x[0];
+}
+
+const rangeErrorCatchVar = rangeErrorCatchFn();
+//                         ^^^^^^^^^^^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
+int rangeErrorCatchFn() {
+  try {
+    const List<int> x = [1];
+    var v = x[1];
+  } on RangeError {
+    return 0;
+  }
+  return 1;
+}
+
 void main() {
   Expect.equals(firstVar, 1);
   Expect.equals(firstCatchVar, 0);
@@ -150,4 +171,6 @@
   Expect.equals(singleCatchVar, 0);
   Expect.equals(singleCatchVar2, 0);
   Expect.equals(typeVar, int);
+  Expect.equals(getWithIndexVar, 1);
+  Expect.equals(rangeErrorCatchVar, 0);
 }
diff --git a/tools/VERSION b/tools/VERSION
index fac5e16..8e39ebb 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 14
 PATCH 0
-PRERELEASE 45
+PRERELEASE 46
 PRERELEASE_PATCH 0
\ No newline at end of file