diff --git a/pkg/front_end/lib/src/fasta/builder/function_type_builder.dart b/pkg/front_end/lib/src/fasta/builder/function_type_builder.dart
index 1f5bbe7..26f56fc 100644
--- a/pkg/front_end/lib/src/fasta/builder/function_type_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/function_type_builder.dart
@@ -107,6 +107,8 @@
       typeParameters = <TypeParameter>[];
       for (TypeVariableBuilder t in typeVariables) {
         typeParameters.add(t.parameter);
+        // Build the bound to detect cycles in typedefs.
+        t.bound?.build(library, origin);
       }
     }
     return new FunctionType(positionalParameters, builtReturnType,
diff --git a/pkg/front_end/lib/src/fasta/builder/type_alias_builder.dart b/pkg/front_end/lib/src/fasta/builder/type_alias_builder.dart
index c4c5502..2f94d08 100644
--- a/pkg/front_end/lib/src/fasta/builder/type_alias_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/type_alias_builder.dart
@@ -426,4 +426,18 @@
   }
 }
 
+/// Used to detect cycles in the declaration of a typedef
+///
+/// When a typedef is built, [pendingTypeAliasMarker] is used as a placeholder
+/// value to indicated that the process has started.  If somewhere in the
+/// process of building the typedef this value is encountered, it's replaced
+/// with [cyclicTypeAliasMarker] as the result of the build process.
+final InvalidType pendingTypeAliasMarker = new InvalidType();
+
+/// Used to detect cycles in the declaration of a typedef
+///
+/// When a typedef is built, [pendingTypeAliasMarker] is used as a placeholder
+/// value to indicated that the process has started.  If somewhere in the
+/// process of building the typedef this value is encountered, it's replaced
+/// with [cyclicTypeAliasMarker] as the result of the build process.
 final InvalidType cyclicTypeAliasMarker = new InvalidType();
diff --git a/pkg/front_end/lib/src/fasta/incremental_compiler.dart b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
index 22a3f8b..cf844af 100644
--- a/pkg/front_end/lib/src/fasta/incremental_compiler.dart
+++ b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
@@ -6,6 +6,9 @@
 
 library fasta.incremental_compiler;
 
+import 'package:_fe_analyzer_shared/src/scanner/abstract_scanner.dart'
+    show ScannerConfiguration;
+
 import 'package:front_end/src/api_prototype/experimental_flags.dart';
 import 'package:front_end/src/api_prototype/front_end.dart';
 import 'package:front_end/src/base/nnbd_mode.dart';
@@ -1021,7 +1024,17 @@
       if (previousSource == null || previousSource.isEmpty) {
         return null;
       }
-      String before = textualOutline(previousSource, performModelling: true);
+      ScannerConfiguration scannerConfiguration = new ScannerConfiguration(
+          enableExtensionMethods: true /* can't be disabled */,
+          enableNonNullable: builder
+              .isNonNullableByDefault /* depends on language version etc */,
+          enableTripleShift:
+              /* should this be on the library? */
+              /* this is what the constant evaluator does */
+              userCode
+                  .isExperimentEnabledGlobally(ExperimentalFlag.tripleShift));
+      String before = textualOutline(previousSource, scannerConfiguration,
+          performModelling: true);
       if (before == null) {
         return null;
       }
@@ -1029,8 +1042,8 @@
       FileSystemEntity entity =
           c.options.fileSystem.entityForUri(builder.fileUri);
       if (await entity.exists()) {
-        now =
-            textualOutline(await entity.readAsBytes(), performModelling: true);
+        now = textualOutline(await entity.readAsBytes(), scannerConfiguration,
+            performModelling: true);
       }
       if (before != now) {
         return null;
diff --git a/pkg/front_end/lib/src/fasta/source/source_type_alias_builder.dart b/pkg/front_end/lib/src/fasta/source/source_type_alias_builder.dart
index 5f1a2d2..b84b276 100644
--- a/pkg/front_end/lib/src/fasta/source/source_type_alias_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_type_alias_builder.dart
@@ -128,17 +128,20 @@
 
   DartType buildThisType() {
     if (thisType != null) {
-      if (identical(thisType, cyclicTypeAliasMarker)) {
+      if (identical(thisType, pendingTypeAliasMarker)) {
+        thisType = cyclicTypeAliasMarker;
         library.addProblem(templateCyclicTypedef.withArguments(name),
             charOffset, noLength, fileUri);
         return const InvalidType();
+      } else if (identical(thisType, cyclicTypeAliasMarker)) {
+        return const InvalidType();
       }
       return thisType;
     }
     // It is a compile-time error for an alias (typedef) to refer to itself. We
     // detect cycles by detecting recursive calls to this method using an
     // instance of InvalidType that isn't identical to `const InvalidType()`.
-    thisType = cyclicTypeAliasMarker;
+    thisType = pendingTypeAliasMarker;
     TypeBuilder type = this.type;
     if (type != null) {
       DartType builtType =
@@ -150,7 +153,11 @@
             tv.bound?.build(library);
           }
         }
-        return thisType = builtType;
+        if (identical(thisType, cyclicTypeAliasMarker)) {
+          return thisType = const InvalidType();
+        } else {
+          return thisType = builtType;
+        }
       } else {
         return thisType = const InvalidType();
       }
diff --git a/pkg/front_end/lib/src/fasta/util/textual_outline.dart b/pkg/front_end/lib/src/fasta/util/textual_outline.dart
index 3f1cb92..a658bc4 100644
--- a/pkg/front_end/lib/src/fasta/util/textual_outline.dart
+++ b/pkg/front_end/lib/src/fasta/util/textual_outline.dart
@@ -26,6 +26,8 @@
 
 import 'package:_fe_analyzer_shared/src/scanner/token.dart' show Token;
 
+import '../messages.dart' show Message;
+
 abstract class _Chunk implements Comparable<_Chunk> {
   int originalPosition;
 
@@ -422,11 +424,14 @@
 //              "show A show B" could just be "show A, B".
 //              "show A, B, C hide A show A" would be empty.
 
-String textualOutline(List<int> rawBytes,
-    {ScannerConfiguration configuration,
-    bool throwOnUnexpected: false,
-    bool performModelling: false,
-    bool addMarkerForUnknownForTest: false}) {
+String textualOutline(
+  List<int> rawBytes,
+  ScannerConfiguration configuration, {
+  bool throwOnUnexpected: false,
+  bool performModelling: false,
+  bool addMarkerForUnknownForTest: false,
+  bool returnNullOnError: true,
+}) {
   Uint8List bytes = new Uint8List(rawBytes.length + 1);
   bytes.setRange(0, rawBytes.length, rawBytes);
 
@@ -451,6 +456,9 @@
   TextualOutlineListener listener = new TextualOutlineListener();
   ClassMemberParser classMemberParser = new ClassMemberParser(listener);
   classMemberParser.parseUnit(firstToken);
+  if (listener.gotError && returnNullOnError) {
+    return null;
+  }
 
   Token nextToken = firstToken;
   _UnknownTokenBuilder currentUnknown = new _UnknownTokenBuilder();
@@ -653,16 +661,17 @@
 main(List<String> args) {
   File f = new File(args[0]);
   Uint8List data = f.readAsBytesSync();
-  String outline =
-      textualOutline(data, throwOnUnexpected: true, performModelling: true);
+  ScannerConfiguration scannerConfiguration = new ScannerConfiguration();
+  String outline = textualOutline(data, scannerConfiguration,
+      throwOnUnexpected: true, performModelling: true);
   if (args.length > 1 && args[1] == "--overwrite") {
     f.writeAsStringSync(outline);
   } else if (args.length > 1 && args[1] == "--benchmark") {
     Stopwatch stopwatch = new Stopwatch()..start();
     int numRuns = 100;
     for (int i = 0; i < numRuns; i++) {
-      String outline2 =
-          textualOutline(data, throwOnUnexpected: true, performModelling: true);
+      String outline2 = textualOutline(data, scannerConfiguration,
+          throwOnUnexpected: true, performModelling: true);
       if (outline2 != outline) throw "Not the same result every time";
     }
     stopwatch.stop();
@@ -671,8 +680,8 @@
     stopwatch = new Stopwatch()..start();
     numRuns = 2500;
     for (int i = 0; i < numRuns; i++) {
-      String outline2 =
-          textualOutline(data, throwOnUnexpected: true, performModelling: true);
+      String outline2 = textualOutline(data, scannerConfiguration,
+          throwOnUnexpected: true, performModelling: true);
       if (outline2 != outline) throw "Not the same result every time";
     }
     stopwatch.stop();
@@ -684,11 +693,12 @@
 }
 
 class TextualOutlineListener extends Listener {
-  Map<Token, _ClassChunk> classStartToChunk = {};
-  Map<Token, _TokenChunk> elementStartToChunk = {};
-  Map<Token, _MetadataChunk> metadataStartToChunk = {};
-  Map<Token, _SingleImportExportChunk> importExportsStartToChunk = {};
-  Map<Token, _TokenChunk> unsortableElementStartToChunk = {};
+  bool gotError = false;
+  final Map<Token, _ClassChunk> classStartToChunk = {};
+  final Map<Token, _TokenChunk> elementStartToChunk = {};
+  final Map<Token, _MetadataChunk> metadataStartToChunk = {};
+  final Map<Token, _SingleImportExportChunk> importExportsStartToChunk = {};
+  final Map<Token, _TokenChunk> unsortableElementStartToChunk = {};
 
   @override
   void endClassMethod(Token getOrSet, Token beginToken, Token beginParam,
@@ -869,4 +879,10 @@
     _combinators = null;
     firstShowOrHide = null;
   }
+
+  @override
+  void handleRecoverableError(
+      Message message, Token startToken, Token endToken) {
+    gotError = true;
+  }
 }
diff --git a/pkg/front_end/test/crashing_test_case_minimizer_impl.dart b/pkg/front_end/test/crashing_test_case_minimizer_impl.dart
index 0749061..be6565f 100644
--- a/pkg/front_end/test/crashing_test_case_minimizer_impl.dart
+++ b/pkg/front_end/test/crashing_test_case_minimizer_impl.dart
@@ -983,7 +983,8 @@
       // instead.
       if (uri.toString().endsWith(".dart")) {
         String textualOutlined =
-            textualOutline(data)?.replaceAll(RegExp(r'\n+'), "\n");
+            textualOutline(data, _getScannerConfiguration(uri))
+                ?.replaceAll(RegExp(r'\n+'), "\n");
 
         bool outlined = false;
         if (textualOutlined != null) {
@@ -1765,7 +1766,14 @@
     return false;
   }
 
-  bool _isUriNnbd(Uri uri) {
+  ScannerConfiguration _getScannerConfiguration(Uri uri) {
+    return new ScannerConfiguration(
+        enableExtensionMethods: true,
+        enableNonNullable: _isUriNnbd(uri, crashOnFail: false),
+        enableTripleShift: false);
+  }
+
+  bool _isUriNnbd(Uri uri, {bool crashOnFail: true}) {
     Uri asImportUri = _getImportUri(uri);
     LibraryBuilder libraryBuilder = _latestCrashingIncrementalCompiler
         .userCode.loader.builders[asImportUri];
@@ -1788,7 +1796,11 @@
         }
       }
     }
-    throw "Couldn't lookup $uri at all!";
+    if (crashOnFail) {
+      throw "Couldn't lookup $uri at all!";
+    } else {
+      return false;
+    }
   }
 
   Future<bool> _crashesOnCompile(Component initialComponent) async {
diff --git a/pkg/front_end/test/fasta/textual_outline_suite.dart b/pkg/front_end/test/fasta/textual_outline_suite.dart
index 7688f80..0a88cd1 100644
--- a/pkg/front_end/test/fasta/textual_outline_suite.dart
+++ b/pkg/front_end/test/fasta/textual_outline_suite.dart
@@ -83,12 +83,15 @@
       TestDescription description, Context context) async {
     List<int> bytes = new File.fromUri(description.uri).readAsBytesSync();
     for (bool modelled in [false, true]) {
-      String result = textualOutline(bytes,
-          throwOnUnexpected: true,
-          performModelling: modelled,
-          addMarkerForUnknownForTest: modelled,
-          configuration:
-              const ScannerConfiguration(enableExtensionMethods: true));
+      // TODO(jensj): NNBD should be configured correctly.
+      String result = textualOutline(
+        bytes,
+        const ScannerConfiguration(enableExtensionMethods: true),
+        throwOnUnexpected: true,
+        performModelling: modelled,
+        addMarkerForUnknownForTest: modelled,
+        returnNullOnError: false,
+      );
       if (result == null) {
         return new Result(
             null, context.expectationSet["EmptyOutput"], description.uri);
diff --git a/pkg/front_end/test/textual_outline_test.dart b/pkg/front_end/test/textual_outline_test.dart
index b6ea904..345fa42 100644
--- a/pkg/front_end/test/textual_outline_test.dart
+++ b/pkg/front_end/test/textual_outline_test.dart
@@ -5,14 +5,22 @@
 // @dart = 2.9
 
 import "dart:convert";
-import "package:front_end/src/fasta/util/textual_outline.dart";
+
+import 'package:_fe_analyzer_shared/src/scanner/abstract_scanner.dart'
+    show ScannerConfiguration;
+
+import "package:front_end/src/fasta/util/textual_outline.dart"
+    show textualOutline;
+
+const ScannerConfiguration scannerConfiguration =
+    const ScannerConfiguration(enableExtensionMethods: true);
 
 main() {
   // Doesn't sort if not asked to perform modelling.
   String result = textualOutline(utf8.encode("""
 b() { print("hello"); }
 a() { print("hello"); }
-"""), throwOnUnexpected: true, performModelling: false);
+"""), scannerConfiguration, throwOnUnexpected: true, performModelling: false);
   if (result !=
       """
 b() {}
@@ -25,7 +33,7 @@
   result = textualOutline(utf8.encode("""
 b() { print("hello"); }
 a() { print("hello"); }
-"""),
+"""), scannerConfiguration,
       throwOnUnexpected: true,
       performModelling: true,
       addMarkerForUnknownForTest: true);
@@ -41,7 +49,7 @@
   // Procedure without content.
   result = textualOutline(utf8.encode("""
 a() {}
-"""),
+"""), scannerConfiguration,
       throwOnUnexpected: true,
       performModelling: true,
       addMarkerForUnknownForTest: true);
@@ -56,7 +64,7 @@
 a() {
   // Whatever
 }
-"""),
+"""), scannerConfiguration,
       throwOnUnexpected: true,
       performModelling: true,
       addMarkerForUnknownForTest: true);
@@ -70,7 +78,7 @@
   result = textualOutline(utf8.encode("""
 class B {}
 class A {}
-"""),
+"""), scannerConfiguration,
       throwOnUnexpected: true,
       performModelling: true,
       addMarkerForUnknownForTest: true);
@@ -87,7 +95,7 @@
 class A {
   // Whatever
 }
-"""),
+"""), scannerConfiguration,
       throwOnUnexpected: true,
       performModelling: true,
       addMarkerForUnknownForTest: true);
@@ -106,7 +114,7 @@
 @a
 @A(3)
 int f1, f2;
-"""),
+"""), scannerConfiguration,
       throwOnUnexpected: true,
       performModelling: true,
       addMarkerForUnknownForTest: true);
@@ -130,7 +138,7 @@
 @a
 @A(3)
 int f1, f2;
-"""),
+"""), scannerConfiguration,
       throwOnUnexpected: true,
       performModelling: true,
       addMarkerForUnknownForTest: true);
@@ -151,7 +159,7 @@
 class C<T> = Object with A<Function(T)>;
 class B<T> = Object with A<Function(T)>;
 class A<T> {}
-"""),
+"""), scannerConfiguration,
       throwOnUnexpected: true,
       performModelling: true,
       addMarkerForUnknownForTest: true);
@@ -176,10 +184,11 @@
 main() {}
 
 import "baz.dart";
-"""),
+"""), scannerConfiguration,
       throwOnUnexpected: true,
       performModelling: true,
-      addMarkerForUnknownForTest: true);
+      addMarkerForUnknownForTest: true,
+      returnNullOnError: false);
   if (result !=
       """
 import "bar.dart";
@@ -202,10 +211,11 @@
 main() {}
 
 export "baz.dart";
-"""),
+"""), scannerConfiguration,
       throwOnUnexpected: true,
       performModelling: true,
-      addMarkerForUnknownForTest: true);
+      addMarkerForUnknownForTest: true,
+      returnNullOnError: false);
   if (result !=
       """
 export "bar.dart";
@@ -233,10 +243,11 @@
 
 export "baz.dart";
 import "baz.dart";
-"""),
+"""), scannerConfiguration,
       throwOnUnexpected: true,
       performModelling: true,
-      addMarkerForUnknownForTest: true);
+      addMarkerForUnknownForTest: true,
+      returnNullOnError: false);
   if (result !=
       """
 export "bar.dart";
@@ -260,10 +271,11 @@
 bar() {
   // whatever
 }
-"""),
+"""), scannerConfiguration,
       throwOnUnexpected: true,
       performModelling: true,
-      addMarkerForUnknownForTest: true);
+      addMarkerForUnknownForTest: true,
+      returnNullOnError: false);
   if (result !=
       """
 part "foo.dart";
@@ -284,10 +296,11 @@
 }
 
 @Object1()
-"""),
+"""), scannerConfiguration,
       throwOnUnexpected: true,
       performModelling: true,
-      addMarkerForUnknownForTest: true);
+      addMarkerForUnknownForTest: true,
+      returnNullOnError: false);
   if (result !=
       """
 @Object2()
@@ -305,7 +318,7 @@
   Class1 get nonNullable1 => property1;
   Class2 get property1 => new Class1();
 }
-"""),
+"""), scannerConfiguration,
       throwOnUnexpected: true,
       performModelling: true,
       addMarkerForUnknownForTest: true);
@@ -326,7 +339,7 @@
 class C<V> extends Super<V> with Mixin<V> {}
 class D extends Super with Mixin {}
 class D2 = Super with Mixin;
-"""),
+"""), scannerConfiguration,
       throwOnUnexpected: true,
       performModelling: true,
       addMarkerForUnknownForTest: true);
@@ -352,7 +365,7 @@
 export "a1.dart";
 @Object4
 import "a0.dart";
-"""),
+"""), scannerConfiguration,
       throwOnUnexpected: true,
       performModelling: true,
       addMarkerForUnknownForTest: true);
@@ -385,10 +398,11 @@
 export "a2.dart" show
 // ok line
 export "a3.dart" show foo;
-"""),
+"""), scannerConfiguration,
       throwOnUnexpected: true,
       performModelling: true,
-      addMarkerForUnknownForTest: true);
+      addMarkerForUnknownForTest: true,
+      returnNullOnError: false);
   if (result !=
       """
 ---- unknown chunk starts ----
@@ -411,7 +425,7 @@
 main() {
   x;
 }
-"""),
+"""), scannerConfiguration,
       throwOnUnexpected: true,
       performModelling: true,
       addMarkerForUnknownForTest: true);
diff --git a/pkg/front_end/testcases/general/constants/various.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/constants/various.dart.textual_outline_modelled.expect
deleted file mode 100644
index 068970b..0000000
--- a/pkg/front_end/testcases/general/constants/various.dart.textual_outline_modelled.expect
+++ /dev/null
@@ -1,39 +0,0 @@
-ConstClassWithFailingAssertWithEmptyMessage failedAssertEmptyMessage =
-    const ConstClassWithFailingAssertWithEmptyMessage();
-
-abstract class AbstractClass {}
-
-class ConstClassWithFailingAssertWithEmptyMessage {
-  const ConstClassWithFailingAssertWithEmptyMessage() : assert(false, "");
-}
-
-class Foo {
-  const Foo(int x)
-      : this.x = x,
-        this.y = "hello".length;
-  final int x;
-  final int y;
-}
-
-class NotAbstractClass {
-  @AbstractClass()
-  Object foo;
-}
-
-const Foo foo = const Foo(42);
-const Symbol barFoo = const Symbol("Foo");
-const bool barFromEnv = const bool.fromEnvironment("bar");
-const bool hasBarEnv = const bool.hasEnvironment("bar");
-const function_const = () {};
-const x1 = --x;
-const x2 = ++x;
-const x3 = x--;
-const x4 = x++;
-const y = 1;
-const y1 = --y;
-const y2 = ++y;
-const y3 = y--;
-const y4 = y++;
-main() {}
-var function_var = () {};
-var x = 1;
diff --git a/pkg/front_end/testcases/general/issue43975.dart b/pkg/front_end/testcases/general/issue43975.dart
new file mode 100644
index 0000000..929affa
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue43975.dart
@@ -0,0 +1,6 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+typedef F = void Function<X extends F>() Function();
+void main() {}
diff --git a/pkg/front_end/testcases/general/issue43975.dart.outline.expect b/pkg/front_end/testcases/general/issue43975.dart.outline.expect
new file mode 100644
index 0000000..a61aa23
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue43975.dart.outline.expect
@@ -0,0 +1,13 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue43975.dart:5:9: Error: The typedef 'F' has a reference to itself.
+// typedef F = void Function<X extends F>() Function();
+//         ^
+//
+import self as self;
+
+typedef F = invalid-type;
+static method main() → void
+  ;
diff --git a/pkg/front_end/testcases/general/issue43975.dart.strong.expect b/pkg/front_end/testcases/general/issue43975.dart.strong.expect
new file mode 100644
index 0000000..a1da936
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue43975.dart.strong.expect
@@ -0,0 +1,12 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue43975.dart:5:9: Error: The typedef 'F' has a reference to itself.
+// typedef F = void Function<X extends F>() Function();
+//         ^
+//
+import self as self;
+
+typedef F = invalid-type;
+static method main() → void {}
diff --git a/pkg/front_end/testcases/general/issue43975.dart.strong.transformed.expect b/pkg/front_end/testcases/general/issue43975.dart.strong.transformed.expect
new file mode 100644
index 0000000..a1da936
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue43975.dart.strong.transformed.expect
@@ -0,0 +1,12 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue43975.dart:5:9: Error: The typedef 'F' has a reference to itself.
+// typedef F = void Function<X extends F>() Function();
+//         ^
+//
+import self as self;
+
+typedef F = invalid-type;
+static method main() → void {}
diff --git a/pkg/front_end/testcases/general/issue43975.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue43975.dart.textual_outline.expect
new file mode 100644
index 0000000..ccb87d9
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue43975.dart.textual_outline.expect
@@ -0,0 +1,2 @@
+typedef F = void Function<X extends F>() Function();
+void main() {}
diff --git a/pkg/front_end/testcases/general/issue43975.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue43975.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..ccb87d9
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue43975.dart.textual_outline_modelled.expect
@@ -0,0 +1,2 @@
+typedef F = void Function<X extends F>() Function();
+void main() {}
diff --git a/pkg/front_end/testcases/general/three_typedefs_loop.dart.outline.expect b/pkg/front_end/testcases/general/three_typedefs_loop.dart.outline.expect
index 12b78a9..f030616 100644
--- a/pkg/front_end/testcases/general/three_typedefs_loop.dart.outline.expect
+++ b/pkg/front_end/testcases/general/three_typedefs_loop.dart.outline.expect
@@ -13,7 +13,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef Foo<unrelated T extends core::Object* = dynamic> = (((invalid-type) →* void) →* void) →* void;
+typedef Foo<unrelated T extends core::Object* = dynamic> = invalid-type;
 typedef Bar<unrelated T extends core::Object* = dynamic> = ((invalid-type) →* void) →* void;
 typedef Baz<unrelated T extends core::Object* = dynamic> = (invalid-type) →* void;
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/three_typedefs_loop.dart.strong.expect b/pkg/front_end/testcases/general/three_typedefs_loop.dart.strong.expect
index 3773b6f..bd2fff9 100644
--- a/pkg/front_end/testcases/general/three_typedefs_loop.dart.strong.expect
+++ b/pkg/front_end/testcases/general/three_typedefs_loop.dart.strong.expect
@@ -13,7 +13,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef Foo<unrelated T extends core::Object* = dynamic> = (((invalid-type) →* void) →* void) →* void;
+typedef Foo<unrelated T extends core::Object* = dynamic> = invalid-type;
 typedef Bar<unrelated T extends core::Object* = dynamic> = ((invalid-type) →* void) →* void;
 typedef Baz<unrelated T extends core::Object* = dynamic> = (invalid-type) →* void;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/three_typedefs_loop.dart.strong.transformed.expect b/pkg/front_end/testcases/general/three_typedefs_loop.dart.strong.transformed.expect
index 3773b6f..bd2fff9 100644
--- a/pkg/front_end/testcases/general/three_typedefs_loop.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/three_typedefs_loop.dart.strong.transformed.expect
@@ -13,7 +13,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef Foo<unrelated T extends core::Object* = dynamic> = (((invalid-type) →* void) →* void) →* void;
+typedef Foo<unrelated T extends core::Object* = dynamic> = invalid-type;
 typedef Bar<unrelated T extends core::Object* = dynamic> = ((invalid-type) →* void) →* void;
 typedef Baz<unrelated T extends core::Object* = dynamic> = (invalid-type) →* void;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/three_typedefs_loop.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/three_typedefs_loop.dart.weak.expect
index de06f6f..d648775a 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/three_typedefs_loop.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/three_typedefs_loop.dart.weak.expect
@@ -13,7 +13,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef Foo<unrelated T extends core::Object* = dynamic> = (((invalid-type) →* void) →* void) →* void;
+typedef Foo<unrelated T extends core::Object* = dynamic> = invalid-type;
 typedef Bar<unrelated T extends core::Object* = dynamic> = ((invalid-type) →* void) →* void;
 typedef Baz<unrelated T extends core::Object* = dynamic> = (invalid-type) →* void;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/three_typedefs_loop.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/three_typedefs_loop.dart.weak.transformed.expect
index de06f6f..d648775a 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/three_typedefs_loop.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/three_typedefs_loop.dart.weak.transformed.expect
@@ -13,7 +13,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef Foo<unrelated T extends core::Object* = dynamic> = (((invalid-type) →* void) →* void) →* void;
+typedef Foo<unrelated T extends core::Object* = dynamic> = invalid-type;
 typedef Bar<unrelated T extends core::Object* = dynamic> = ((invalid-type) →* void) →* void;
 typedef Baz<unrelated T extends core::Object* = dynamic> = (invalid-type) →* void;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_40.yaml b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_40.yaml
index df6b22b..3d630a8 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_40.yaml
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_40.yaml
@@ -34,7 +34,7 @@
           method(new A());
         }
         extension Extension2 on A {
-          boz() => 87;
+          boz() { return 87; }
         }
     expectedLibraryCount: 3
   - entry: main.dart
@@ -73,8 +73,7 @@
           method(new A());
         }
         extension Extension2 on A {
-          boz() => 123;
+          boz() { return 123; }
         }
     expectedLibraryCount: 3
     expectsRebuildBodiesOnly: true
-
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_40.yaml.world.1.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_40.yaml.world.1.expect
index e0981f7..eae0d04 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_40.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_40.yaml.world.1.expect
@@ -56,8 +56,9 @@
   static method main() → dynamic {
     lib2::method(new main::A::•());
   }
-  static method Extension2|boz(lowered final main::A* #this) → dynamic
+  static method Extension2|boz(lowered final main::A* #this) → dynamic {
     return 87;
+  }
   static method Extension2|get#boz(lowered final main::A* #this) → () →* dynamic
     return () → dynamic => main::Extension2|boz(#this);
 }
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_40.yaml.world.2.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_40.yaml.world.2.expect
index 13f26e0..d4f85de 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_40.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_40.yaml.world.2.expect
@@ -57,8 +57,9 @@
   static method main() → dynamic {
     lib2::method(new main::A::•());
   }
-  static method Extension2|boz(lowered final main::A* #this) → dynamic
+  static method Extension2|boz(lowered final main::A* #this) → dynamic {
     return 87;
+  }
   static method Extension2|get#boz(lowered final main::A* #this) → () →* dynamic
     return () → dynamic => main::Extension2|boz(#this);
 }
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_40.yaml.world.3.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_40.yaml.world.3.expect
index 562f9d8..8108d22 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_40.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_40.yaml.world.3.expect
@@ -57,8 +57,9 @@
   static method main() → dynamic {
     lib2::method(new main::A::•());
   }
-  static method Extension2|boz(lowered final main::A* #this) → dynamic
+  static method Extension2|boz(lowered final main::A* #this) → dynamic {
     return 123;
+  }
   static method Extension2|get#boz(lowered final main::A* #this) → () →* dynamic
     return () → dynamic => main::Extension2|boz(#this);
 }
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_47.yaml b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_47.yaml
new file mode 100644
index 0000000..03f5018
--- /dev/null
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_47.yaml
@@ -0,0 +1,26 @@
+# Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE.md file.
+
+# Extension methods.
+
+type: newworld
+worlds:
+  - entry: main.dart
+    experiments: alternative-invalidation-strategy,non-nullable
+    sources:
+      main.dart: |
+        late final int x = 42;
+        extension Foo on int {
+          void x() { /*content =)*/ }
+        }
+    expectedLibraryCount: 1
+
+  - entry: main.dart
+    experiments: alternative-invalidation-strategy
+    worldType: updated
+    expectInitializeFromDill: false
+    invalidate:
+      - main.dart
+    expectedLibraryCount: 1
+    expectsRebuildBodiesOnly: true
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_47.yaml.world.1.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_47.yaml.world.1.expect
new file mode 100644
index 0000000..931579a
--- /dev/null
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_47.yaml.world.1.expect
@@ -0,0 +1,12 @@
+main = <No Member>;
+library from "org-dartlang-test:///main.dart" as main {
+
+  extension Foo on dart.core::int {
+    method x = main::Foo|x;
+    tearoff x = main::Foo|get#x;
+  }
+  late static final field dart.core::int x = 42;
+  static method Foo|x(lowered final dart.core::int #this) → void {}
+  static method Foo|get#x(lowered final dart.core::int #this) → () → void
+    return () → void => main::Foo|x(#this);
+}
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_47.yaml.world.2.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_47.yaml.world.2.expect
new file mode 100644
index 0000000..931579a
--- /dev/null
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_47.yaml.world.2.expect
@@ -0,0 +1,12 @@
+main = <No Member>;
+library from "org-dartlang-test:///main.dart" as main {
+
+  extension Foo on dart.core::int {
+    method x = main::Foo|x;
+    tearoff x = main::Foo|get#x;
+  }
+  late static final field dart.core::int x = 42;
+  static method Foo|x(lowered final dart.core::int #this) → void {}
+  static method Foo|get#x(lowered final dart.core::int #this) → () → void
+    return () → void => main::Foo|x(#this);
+}
diff --git a/pkg/front_end/testcases/nnbd/issue44857.dart b/pkg/front_end/testcases/nnbd/issue44857.dart
new file mode 100644
index 0000000..96ac4d5
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue44857.dart
@@ -0,0 +1,11 @@
+// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+typedef F = Never Function(void Function<T extends Never>(T));
+
+void main() {
+  const c = F;
+  print("Are $c, $F identical?");
+  print(identical(c, F));
+}
diff --git a/pkg/front_end/testcases/nnbd/issue44857.dart.outline.expect b/pkg/front_end/testcases/nnbd/issue44857.dart.outline.expect
new file mode 100644
index 0000000..82e5613
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue44857.dart.outline.expect
@@ -0,0 +1,6 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+
+typedef F = (<T extends Never = dynamic>(T) → void) → Never;
+static method main() → void
+  ;
diff --git a/pkg/front_end/testcases/nnbd/issue44857.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue44857.dart.strong.expect
new file mode 100644
index 0000000..4a6c15d
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue44857.dart.strong.expect
@@ -0,0 +1,13 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef F = (<T extends Never = dynamic>(T) → void) → Never;
+static method main() → void {
+  core::print("Are ${#C1}, ${#C1} identical?");
+  core::print(core::identical(#C1, #C1));
+}
+
+constants  {
+  #C1 = TypeLiteralConstant((<T extends Never = dynamic>(Never) → void) → Never)
+}
diff --git a/pkg/front_end/testcases/nnbd/issue44857.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue44857.dart.strong.transformed.expect
new file mode 100644
index 0000000..3ddde37
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue44857.dart.strong.transformed.expect
@@ -0,0 +1,17 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef F = (<T extends Never = dynamic>(T) → void) → Never;
+static method main() → void {
+  core::print("Are ${#C1}, ${#C1} identical?");
+  core::print(core::identical(#C1, #C1));
+}
+
+constants  {
+  #C1 = TypeLiteralConstant((<T extends Never = dynamic>(Never) → void) → Never)
+}
+
+Extra constant evaluation status:
+Evaluated: StaticInvocation @ org-dartlang-testcase:///issue44857.dart:10:9 -> BoolConstant(true)
+Extra constant evaluation: evaluated: 4, effectively constant: 1
diff --git a/pkg/front_end/testcases/nnbd/issue44857.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd/issue44857.dart.textual_outline.expect
new file mode 100644
index 0000000..cb283ab
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue44857.dart.textual_outline.expect
@@ -0,0 +1,2 @@
+typedef F = Never Function(void Function<T extends Never>(T));
+void main() {}
diff --git a/pkg/front_end/testcases/nnbd/issue44857.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd/issue44857.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..cb283ab
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue44857.dart.textual_outline_modelled.expect
@@ -0,0 +1,2 @@
+typedef F = Never Function(void Function<T extends Never>(T));
+void main() {}
diff --git a/pkg/front_end/testcases/nnbd/issue44857.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue44857.dart.weak.expect
new file mode 100644
index 0000000..ad063b4
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue44857.dart.weak.expect
@@ -0,0 +1,13 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef F = (<T extends Never = dynamic>(T) → void) → Never;
+static method main() → void {
+  core::print("Are ${#C1}, ${#C1} identical?");
+  core::print(core::identical(#C1, #C1));
+}
+
+constants  {
+  #C1 = TypeLiteralConstant((<T extends Never* = Never*>(Never*) →* void) →* Never*)
+}
diff --git a/pkg/front_end/testcases/nnbd/issue44857.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue44857.dart.weak.transformed.expect
new file mode 100644
index 0000000..dd62920
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue44857.dart.weak.transformed.expect
@@ -0,0 +1,17 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef F = (<T extends Never = dynamic>(T) → void) → Never;
+static method main() → void {
+  core::print("Are ${#C1}, ${#C1} identical?");
+  core::print(core::identical(#C1, #C1));
+}
+
+constants  {
+  #C1 = TypeLiteralConstant((<T extends Never* = Never*>(Never*) →* void) →* Never*)
+}
+
+Extra constant evaluation status:
+Evaluated: StaticInvocation @ org-dartlang-testcase:///issue44857.dart:10:9 -> BoolConstant(true)
+Extra constant evaluation: evaluated: 4, effectively constant: 1
diff --git a/pkg/front_end/testcases/nnbd_mixed/inheritance_from_opt_in.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/inheritance_from_opt_in.dart.textual_outline_modelled.expect
deleted file mode 100644
index e42e9ac..0000000
--- a/pkg/front_end/testcases/nnbd_mixed/inheritance_from_opt_in.dart.textual_outline_modelled.expect
+++ /dev/null
@@ -1,27 +0,0 @@
-// @dart = 2.5
-import 'inheritance_from_opt_in_lib.dart';
-
-class LegacyClass1 extends Class1 {}
-
-class LegacyClass2<T> extends Class2<T> {}
-
-class LegacyClass3a<T> extends Class3<T> {}
-
-class LegacyClass3b<T> extends Class3<T> implements GenericInterface<T> {}
-
-class LegacyClass4a extends Class4a {}
-
-class LegacyClass4b implements GenericInterface<num> {}
-
-class LegacyClass4c implements GenericInterface<num?> {}
-
-class LegacyClass4d extends Class4a implements GenericInterface<num> {}
-
-class LegacyClass4e implements Class4a, Class4b {}
-
-class LegacyClass5 extends Class5 implements GenericInterface<Object> {}
-
-class LegacyClass6a<T> extends Class3<T> implements GenericSubInterface<T> {}
-
-class LegacyClass6b<T> extends LegacyClass3a<T>
-    implements GenericSubInterface<T> {}
diff --git a/pkg/front_end/testcases/rasta/malformed_function_type.dart.outline.expect b/pkg/front_end/testcases/rasta/malformed_function_type.dart.outline.expect
index 6c35ab9..dc3f69b 100644
--- a/pkg/front_end/testcases/rasta/malformed_function_type.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/malformed_function_type.dart.outline.expect
@@ -7,8 +7,7 @@
 //                ^
 //
 import self as self;
-import "dart:core" as core;
 
-typedef Handle = (core::String*) →* invalid-type;
+typedef Handle = invalid-type;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/rasta/malformed_function_type.dart.strong.expect b/pkg/front_end/testcases/rasta/malformed_function_type.dart.strong.expect
index 1cb9f39..3444c42 100644
--- a/pkg/front_end/testcases/rasta/malformed_function_type.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/malformed_function_type.dart.strong.expect
@@ -7,9 +7,8 @@
 //                ^
 //
 import self as self;
-import "dart:core" as core;
 
-typedef Handle = (core::String*) →* invalid-type;
+typedef Handle = invalid-type;
 static method main() → dynamic {
-  (core::String*) →* invalid-type h;
+  invalid-type h;
 }
diff --git a/pkg/front_end/testcases/rasta/malformed_function_type.dart.strong.transformed.expect b/pkg/front_end/testcases/rasta/malformed_function_type.dart.strong.transformed.expect
index 1cb9f39..3444c42 100644
--- a/pkg/front_end/testcases/rasta/malformed_function_type.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/rasta/malformed_function_type.dart.strong.transformed.expect
@@ -7,9 +7,8 @@
 //                ^
 //
 import self as self;
-import "dart:core" as core;
 
-typedef Handle = (core::String*) →* invalid-type;
+typedef Handle = invalid-type;
 static method main() → dynamic {
-  (core::String*) →* invalid-type h;
+  invalid-type h;
 }
diff --git a/pkg/kernel/lib/src/const_canonical_type.dart b/pkg/kernel/lib/src/const_canonical_type.dart
index 9a1dd42..186c980 100644
--- a/pkg/kernel/lib/src/const_canonical_type.dart
+++ b/pkg/kernel/lib/src/const_canonical_type.dart
@@ -112,14 +112,15 @@
     assert(type.declaredNullability == Nullability.nonNullable);
 
     List<TypeParameter> canonicalizedTypeParameters;
-    Map<TypeParameter, DartType> substitutionMap;
+    Substitution substitution;
     if (type.typeParameters.isEmpty) {
       canonicalizedTypeParameters = const <TypeParameter>[];
-      substitutionMap = const <TypeParameter, DartType>{};
+      substitution = null;
     } else {
-      substitutionMap = <TypeParameter, DartType>{};
-      canonicalizedTypeParameters =
-          new List<TypeParameter>.of(type.typeParameters, growable: false);
+      FreshTypeParameters freshTypeParameters =
+          getFreshTypeParameters(type.typeParameters);
+      substitution = freshTypeParameters.substitution;
+      canonicalizedTypeParameters = freshTypeParameters.freshTypeParameters;
       for (TypeParameter parameter in canonicalizedTypeParameters) {
         parameter.bound = computeConstCanonicalType(parameter.bound, coreTypes,
             isNonNullableByDefault: isNonNullableByDefault);
@@ -130,11 +131,6 @@
       for (int i = 0; i < canonicalizedTypeParameters.length; ++i) {
         canonicalizedTypeParameters[i].defaultType = defaultTypes[i];
       }
-      for (int i = 0; i < canonicalizedTypeParameters.length; ++i) {
-        substitutionMap[canonicalizedTypeParameters[i]] =
-            new TypeParameterType.forAlphaRenaming(
-                type.typeParameters[i], canonicalizedTypeParameters[i]);
-      }
     }
 
     List<DartType> canonicalizedPositionalParameters;
@@ -147,8 +143,8 @@
         DartType canonicalized = computeConstCanonicalType(
             canonicalizedPositionalParameters[i], coreTypes,
             isNonNullableByDefault: isNonNullableByDefault);
-        if (substitutionMap.isNotEmpty) {
-          canonicalized = substitute(canonicalized, substitutionMap);
+        if (substitution != null) {
+          canonicalized = substitution.substituteType(canonicalized);
         }
         canonicalizedPositionalParameters[i] = canonicalized;
       }
@@ -164,8 +160,8 @@
         DartType canonicalized = computeConstCanonicalType(
             canonicalizedNamedParameters[i].type, coreTypes,
             isNonNullableByDefault: isNonNullableByDefault);
-        if (substitutionMap.isNotEmpty) {
-          canonicalized = substitute(canonicalized, substitutionMap);
+        if (substitution != null) {
+          canonicalized = substitution.substituteType(canonicalized);
         }
         canonicalizedNamedParameters[i] = new NamedType(
             canonicalizedNamedParameters[i].name, canonicalized,
@@ -176,9 +172,9 @@
     DartType canonicalizedReturnType = computeConstCanonicalType(
         type.returnType, coreTypes,
         isNonNullableByDefault: isNonNullableByDefault);
-    if (substitutionMap.isNotEmpty) {
+    if (substitution != null) {
       canonicalizedReturnType =
-          substitute(canonicalizedReturnType, substitutionMap);
+          substitution.substituteType(canonicalizedReturnType);
     }
 
     // Canonicalize typedef type, just in case.
diff --git a/samples/ffi/sample_ffi_functions.dart b/samples/ffi/sample_ffi_functions.dart
index 749dc53..4610fa7 100644
--- a/samples/ffi/sample_ffi_functions.dart
+++ b/samples/ffi/sample_ffi_functions.dart
@@ -100,7 +100,7 @@
     print(result.runtimeType);
 
     var mint = 0x7FFFFFFFFFFFFFFF; // 2 ^ 63 - 1
-    result = intComputation(1, 1, 0, mint);
+    result = intComputation(1, 1, 1, mint);
     print(result);
     print(result.runtimeType);
   }
diff --git a/samples_2/ffi/sample_ffi_functions.dart b/samples_2/ffi/sample_ffi_functions.dart
index 53990ac..5142bc4 100644
--- a/samples_2/ffi/sample_ffi_functions.dart
+++ b/samples_2/ffi/sample_ffi_functions.dart
@@ -102,7 +102,7 @@
     print(result.runtimeType);
 
     var mint = 0x7FFFFFFFFFFFFFFF; // 2 ^ 63 - 1
-    result = intComputation(1, 1, 0, mint);
+    result = intComputation(1, 1, 1, mint);
     print(result);
     print(result.runtimeType);
   }
diff --git a/tools/VERSION b/tools/VERSION
index d37ec91..4d69655 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 13
 PATCH 0
-PRERELEASE 13
+PRERELEASE 14
 PRERELEASE_PATCH 0
\ No newline at end of file
