diff --git a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
index b372ad4..c8e1eff 100644
--- a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
@@ -9665,15 +9665,13 @@
         r"""Try removing the keyword 'var', or replacing it with the name of the return type.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Template<
-    Message Function(
-        String
-            name)> templateVariableCouldBeNullDueToWrite = const Template<
-        Message Function(String name)>(
-    messageTemplate:
-        r"""Variable '#name' could be null due to a write occurring here.""",
-    tipTemplate: r"""Try null checking the variable after the write.""",
-    withArguments: _withArgumentsVariableCouldBeNullDueToWrite);
+const Template<Message Function(String name)>
+    templateVariableCouldBeNullDueToWrite =
+    const Template<Message Function(String name)>(
+        messageTemplate:
+            r"""Variable '#name' could be null due to an intervening write.""",
+        tipTemplate: r"""Try null checking the variable after the write.""",
+        withArguments: _withArgumentsVariableCouldBeNullDueToWrite);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Message Function(String name)> codeVariableCouldBeNullDueToWrite =
@@ -9687,7 +9685,7 @@
   name = demangleMixinApplicationName(name);
   return new Message(codeVariableCouldBeNullDueToWrite,
       message:
-          """Variable '${name}' could be null due to a write occurring here.""",
+          """Variable '${name}' could be null due to an intervening write.""",
       tip: """Try null checking the variable after the write.""",
       arguments: {'name': name});
 }
diff --git a/pkg/analysis_server/lib/src/analysis_server_abstract.dart b/pkg/analysis_server/lib/src/analysis_server_abstract.dart
index d96b0c4..a5744ac 100644
--- a/pkg/analysis_server/lib/src/analysis_server_abstract.dart
+++ b/pkg/analysis_server/lib/src/analysis_server_abstract.dart
@@ -112,6 +112,7 @@
   final List<String> analyzableFilePatterns = <String>[
     '**/*.${AnalysisEngine.SUFFIX_DART}',
     '**/${AnalysisEngine.ANALYSIS_OPTIONS_YAML_FILE}',
+    '**/${AnalysisEngine.FIX_DATA_FILE}',
     '**/${AnalysisEngine.PUBSPEC_YAML_FILE}',
     '**/${AnalysisEngine.ANDROID_MANIFEST_FILE}'
   ];
diff --git a/pkg/analysis_server/lib/src/cider/fixes.dart b/pkg/analysis_server/lib/src/cider/fixes.dart
index d0ca2c8..3f3f087 100644
--- a/pkg/analysis_server/lib/src/cider/fixes.dart
+++ b/pkg/analysis_server/lib/src/cider/fixes.dart
@@ -8,6 +8,7 @@
 import 'package:analysis_server/src/services/correction/fix_internal.dart';
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/instrumentation/service.dart';
+import 'package:analyzer/source/line_info.dart';
 import 'package:analyzer/src/dart/analysis/performance_logger.dart';
 import 'package:analyzer/src/dart/micro/resolve_file.dart';
 import 'package:meta/meta.dart';
@@ -18,9 +19,12 @@
   /// The fixes for the [error], might be empty.
   final List<Fix> fixes;
 
+  final LineInfo lineInfo;
+
   CiderErrorFixes({
     @required this.error,
     @required this.fixes,
+    @required this.lineInfo,
   });
 }
 
@@ -54,7 +58,7 @@
           fixes.sort(Fix.SORT_BY_RELEVANCE);
 
           result.add(
-            CiderErrorFixes(error: error, fixes: fixes),
+            CiderErrorFixes(error: error, fixes: fixes, lineInfo: lineInfo),
           );
         }
       }
diff --git a/pkg/analyzer/lib/src/dart/resolver/type_property_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/type_property_resolver.dart
index 65bef9a..d6204de 100644
--- a/pkg/analyzer/lib/src/dart/resolver/type_property_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/type_property_resolver.dart
@@ -392,8 +392,8 @@
       String variableName, Expression writeExpression) {
     return DiagnosticMessageImpl(
         filePath: source.fullName,
-        message:
-            "Variable '$variableName' could be null due to a write occurring here.",
+        message: "Variable '$variableName' could be null due to an intervening "
+            "write.",
         offset: writeExpression.offset,
         length: writeExpression.length);
   }
diff --git a/pkg/analyzer/test/generated/non_error_resolver_test.dart b/pkg/analyzer/test/generated/non_error_resolver_test.dart
index 6f2cf9d..6536e46 100644
--- a/pkg/analyzer/test/generated/non_error_resolver_test.dart
+++ b/pkg/analyzer/test/generated/non_error_resolver_test.dart
@@ -15,6 +15,7 @@
   defineReflectiveSuite(() {
     defineReflectiveTests(NonConstantValueInInitializer);
     defineReflectiveTests(NonErrorResolverTest);
+    defineReflectiveTests(NonErrorResolverWithoutNullSafetyTest);
   });
 }
 
@@ -54,9 +55,92 @@
 
 @reflectiveTest
 class NonErrorResolverTest extends PubPackageResolutionTest
-    with WithoutNullSafetyMixin {
-  // TODO(https://github.com/dart-lang/sdk/issues/44666): Use null safety in
-  //  test cases.
+    with NonErrorResolverTestCases {
+  test_await_flattened() async {
+    await assertNoErrorsInCode('''
+Future<Future<int>>? ffi() => null;
+f() async {
+  Future<int>? b = await ffi();
+  b;
+}
+''');
+  }
+
+  test_conflictingStaticGetterAndInstanceSetter_thisClass() async {
+    await assertErrorsInCode(r'''
+class A {
+  static get x => 0;
+  static set x(int p) {}
+}
+''', [
+      error(CompileTimeErrorCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 23, 1),
+    ]);
+  }
+
+  test_const_constructor_with_named_generic_parameter() async {
+    await assertNoErrorsInCode('''
+class C<T> {
+  const C({required T t});
+}
+const c = const C(t: 1);
+''');
+  }
+
+  test_inconsistentMethodInheritance_accessors_typeParameters1() async {
+    await assertNoErrorsInCode(r'''
+abstract class A<E> {
+  E? get x;
+}
+abstract class B<E> {
+  E? get x;
+}
+class C<E> implements A<E>, B<E> {
+  E? get x => null;
+}
+''');
+  }
+
+  test_inconsistentMethodInheritance_accessors_typeParameters2() async {
+    await assertNoErrorsInCode(r'''
+abstract class A<E> {
+  E? get x {return null;}
+}
+class B<E> {
+  E? get x {return null;}
+}
+class C<E> extends A<E> implements B<E> {}
+''');
+  }
+
+  test_inconsistentMethodInheritance_accessors_typeParameters_diamond() async {
+    await assertNoErrorsInCode(r'''
+abstract class F<E> extends B<E> {}
+class D<E> extends F<E> {
+  external E? get g;
+}
+abstract class C<E> {
+  E? get g;
+}
+abstract class B<E> implements C<E> {
+  E? get g { return null; }
+}
+class A<E> extends B<E> implements D<E> {
+}
+''');
+  }
+
+  test_typedef_not_function() async {
+    newFile('$testPackageLibPath/a.dart', content: '''
+typedef F = int;
+''');
+    await assertNoErrorsInCode('''
+import 'a.dart';
+F f = 0;
+''');
+  }
+}
+
+mixin NonErrorResolverTestCases on PubPackageResolutionTest {
   test_ambiguousExport() async {
     newFile("$testPackageLibPath/lib1.dart", content: r'''
 library lib1;
@@ -258,13 +342,16 @@
 
 class MaterialPageRoute {
   final Widget Function() builder;
-  const MaterialPageRoute({this.builder});
+  const MaterialPageRoute({this.builder = f});
 }
 
+Widget f() => Widget();
+
 void main() {
-  print(MaterialPageRoute(
-      builder: () { return Widget(); }
-  ));
+  MaterialPageRoute(builder: () {
+      return Widget();
+    },
+  );
 }
 ''');
   }
@@ -272,7 +359,7 @@
   test_argumentTypeNotAssignable_typedef_local() async {
     await assertNoErrorsInCode(r'''
 typedef A(int p1, String p2);
-A getA() => null;
+A getA() => (int p1, String p2) {};
 f() {
   A a = getA();
   a(1, '2');
@@ -294,7 +381,7 @@
 f() async {
   assert(false, await g());
 }
-Future<String> g() => null;
+Future<String> g() => Future.value('');
 ''');
   }
 
@@ -344,32 +431,30 @@
     // In the code below, the type of (() => f()) has a return type which is
     // a class, and that class is inferred from the return type of the typedef
     // F.
-    await assertErrorsInCode('''
+    await assertNoErrorsInCode('''
 class C {}
 typedef C F();
-F f;
+F f = () => C();
 main() {
   F f2 = (() => f());
+  f2;
 }
-''', [
-      error(HintCode.UNUSED_LOCAL_VARIABLE, 44, 2),
-    ]);
+''');
   }
 
   test_assignability_function_expr_rettype_from_typedef_typedef() async {
     // In the code below, the type of (() => f()) has a return type which is
     // a typedef, and that typedef is inferred from the return type of the
     // typedef F.
-    await assertErrorsInCode('''
+    await assertNoErrorsInCode('''
 typedef G F();
 typedef G();
-F f;
+F f = () => () => {};
 main() {
   F f2 = (() => f());
+  f2;
 }
-''', [
-      error(HintCode.UNUSED_LOCAL_VARIABLE, 46, 2),
-    ]);
+''');
   }
 
   test_assignmentToFinal_prefixNegate() async {
@@ -403,7 +488,7 @@
   set x(v) {}
 }
 class B {
-  static A a;
+  static A a = A();
 }
 main() {
   B.a.x = 0;
@@ -465,7 +550,7 @@
   Future<int> futureInt = createFutureInt();
   futureInt.then((int i) => print(i));
 }
-Future<int> f() => null;
+Future<int> f() => Future.value(0);
 ''');
   }
 
@@ -595,26 +680,14 @@
     ]);
   }
 
-  test_await_flattened() async {
-    await assertErrorsInCode('''
-Future<Future<int>> ffi() => null;
-f() async {
-  Future<int> b = await ffi();
-}
-''', [
-      error(HintCode.UNUSED_LOCAL_VARIABLE, 61, 1),
-    ]);
-  }
-
   test_await_simple() async {
-    await assertErrorsInCode('''
-Future<int> fi() => null;
+    await assertNoErrorsInCode('''
+Future<int> fi() => Future.value(0);
 f() async {
   int a = await fi();
+  a;
 }
-''', [
-      error(HintCode.UNUSED_LOCAL_VARIABLE, 44, 1),
-    ]);
+''');
   }
 
   test_awaitInWrongContext_async() async {
@@ -649,7 +722,7 @@
   test_bug_24539_getter() async {
     await assertNoErrorsInCode('''
 class C<T> {
-  List<Foo> get x => null;
+  List<Foo> get x => [];
 }
 
 typedef Foo(param);
@@ -729,24 +802,6 @@
 ''');
   }
 
-  test_conflictingStaticGetterAndInstanceSetter_thisClass() async {
-    await assertNoErrorsInCode(r'''
-class A {
-  static get x => 0;
-  static set x(int p) {}
-}
-''');
-  }
-
-  test_const_constructor_with_named_generic_parameter() async {
-    await assertNoErrorsInCode('''
-class C<T> {
-  const C({T t});
-}
-const c = const C(t: 1);
-''');
-  }
-
   test_const_dynamic() async {
     await assertNoErrorsInCode('''
 const Type d = dynamic;
@@ -820,7 +875,7 @@
   test_constConstructorWithNonFinalField_static() async {
     await assertNoErrorsInCode(r'''
 class A {
-  static int x;
+  static int x = 0;
   const A();
 }
 ''');
@@ -908,10 +963,6 @@
   const B.c3(String p) : v = p == 0;
   const B.c4(String p) : v = p == 0.0;
   const B.c5(String p) : v = p == '';
-  const B.n1(num p) : v = p == null;
-  const B.n2(num p) : v = null == p;
-  const B.n3(Object p) : v = p == null;
-  const B.n4(Object p) : v = null == p;
 }
 ''');
   }
@@ -935,10 +986,6 @@
   const B.c3(String p) : v = p != 0;
   const B.c4(String p) : v = p != 0.0;
   const B.c5(String p) : v = p != '';
-  const B.n1(num p) : v = p != null;
-  const B.n2(num p) : v = null != p;
-  const B.n3(Object p) : v = p != null;
-  const B.n4(Object p) : v = null != p;
 }
 ''');
   }
@@ -1119,7 +1166,7 @@
   test_extraPositionalArguments_typedef_local() async {
     await assertNoErrorsInCode(r'''
 typedef A(p1, p2);
-A getA() => null;
+A getA() => (p1, p2) {};
 f() {
   A a = getA();
   a(1, 2);
@@ -1141,8 +1188,9 @@
 class C {
   final Function field;
 
-  C({String this.field(int value)});
+  C({String this.field(int value) = f});
 }
+String f(int value) => '';
 ''');
   }
 
@@ -1161,8 +1209,9 @@
 class C {
   final Object Function(int, double) field;
 
-  C({String Function(num, Object) this.field});
+  C({String Function(num, Object) this.field = f});
 }
+String f(num a, Object b) => '';
 ''');
   }
 
@@ -1196,8 +1245,8 @@
   test_fieldInitializerOutsideConstructor_defaultParameters() async {
     await assertNoErrorsInCode(r'''
 class A {
-  int x;
-  A([this.x]) {}
+  int x = 0;
+  A([this.x = 1]) {}
 }
 ''');
   }
@@ -1424,7 +1473,7 @@
 }
 
 class A {
-  Foo f;
+  Foo f = <T>(T x) => 0;
   void test() {
     f<String>("hello");
   }
@@ -1442,7 +1491,7 @@
 }
 
 class A {
-  Foo<int> f;
+  Foo<int> f = <T>(T x) => 0;
   void test() {
     f<String>("hello");
   }
@@ -1460,7 +1509,7 @@
 }
 
 class A {
-  Foo f;
+  Foo f = <T>(T x) {};
   void test() {
     f<String>("hello");
   }
@@ -1468,18 +1517,6 @@
 ''');
   }
 
-  test_genericTypeAlias_invalidGenericFunctionType() async {
-    // There is a parse error, but no crashes.
-    await assertErrorsInCode('''
-typedef F = int;
-main(p) {
-  p is F;
-}
-''', [
-      error(ParserErrorCode.INVALID_GENERIC_FUNCTION_TYPE, 10, 1),
-    ]);
-  }
-
   test_genericTypeAlias_noTypeParameters() async {
     await assertNoErrorsInCode(r'''
 typedef Foo = int Function<T>(T x);
@@ -1541,7 +1578,7 @@
     await assertNoErrorsInCode(r'''
 library lib;
 import 'part.dart';
-A a;
+A a = A();
 ''');
   }
 
@@ -1552,7 +1589,7 @@
     await assertNoErrorsInCode(r'''
 library lib;
 import 'part.dart';
-A a;
+A a = A();
 ''');
   }
 
@@ -1576,49 +1613,6 @@
 ''');
   }
 
-  test_inconsistentMethodInheritance_accessors_typeParameter2() async {
-    await assertNoErrorsInCode(r'''
-abstract class A<E> {
-  E get x {return null;}
-}
-class B<E> {
-  E get x {return null;}
-}
-class C<E> extends A<E> implements B<E> {}
-''');
-  }
-
-  test_inconsistentMethodInheritance_accessors_typeParameters1() async {
-    await assertNoErrorsInCode(r'''
-abstract class A<E> {
-  E get x;
-}
-abstract class B<E> {
-  E get x;
-}
-class C<E> implements A<E>, B<E> {
-  E get x => null;
-}
-''');
-  }
-
-  test_inconsistentMethodInheritance_accessors_typeParameters_diamond() async {
-    await assertNoErrorsInCode(r'''
-abstract class F<E> extends B<E> {}
-class D<E> extends F<E> {
-  external E get g;
-}
-abstract class C<E> {
-  E get g;
-}
-abstract class B<E> implements C<E> {
-  E get g { return null; }
-}
-class A<E> extends B<E> implements D<E> {
-}
-''');
-  }
-
   test_inconsistentMethodInheritance_methods_typeParameter2() async {
     await assertNoErrorsInCode(r'''
 class A<E> {
@@ -1966,10 +1960,10 @@
   test_invalidMethodOverrideNamedParamType() async {
     await assertNoErrorsInCode(r'''
 class A {
-  m({int a}) {}
+  m({int a = 1}) {}
 }
 class B implements A {
-  m({int a, int b}) {}
+  m({int a = 1, int b = 2}) {}
 }
 ''');
   }
@@ -2376,23 +2370,22 @@
   }
 
   test_mixinInference_with_actual_mixins() async {
-    await assertErrorsInCode('''
+    await assertNoErrorsInCode('''
 class I<X> {}
 
 mixin M0<T> on I<T> {}
 
 mixin M1<T> on I<T> {
-  T foo() => null;
+  T foo(T a) => a;
 }
 
 class A = I<int> with M0, M1;
 
 void main () {
-  var x = new A().foo();
+  var x = new A().foo(0);
+  x;
 }
-''', [
-      error(HintCode.UNUSED_LOCAL_VARIABLE, 135, 1),
-    ]);
+''');
     var main = result.unit!.declarations.last as FunctionDeclaration;
     var mainBody = main.functionExpression.body as BlockFunctionBody;
     var xDecl = mainBody.block.statements[0] as VariableDeclarationStatement;
@@ -2927,11 +2920,11 @@
     await assertNoErrorsInCode(r'''
 f() {
   var c = new C();
-  c<String>().codeUnits;
+  c<String>('').codeUnits;
 }
 
 class C {
-  T call<T>() => null;
+  T call<T>(T a) => a;
 }
 ''');
   }
@@ -3000,7 +2993,7 @@
   test_regress34906() async {
     await assertNoErrorsInCode(r'''
 typedef G<X, Y extends Function(X)> = X Function(Function(Y));
-G<dynamic, Function(Null)> superBoundedG;
+f(G<dynamic, Function(Null)> superBoundedG) {}
 ''');
   }
 
@@ -3039,16 +3032,6 @@
 ''');
   }
 
-  test_typedef_not_function() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
-typedef F = int;
-''');
-    await assertNoErrorsInCode('''
-import 'a.dart';
-F f;
-''');
-  }
-
   test_typePromotion_booleanAnd_useInRight() async {
     await assertNoErrorsInCode(r'''
 main(Object p) {
@@ -3066,20 +3049,6 @@
 ''');
   }
 
-  test_typePromotion_conditional_issue14655() async {
-    await assertNoErrorsInCode(r'''
-class A {}
-class B extends A {}
-class C extends B {
-  mc() {}
-}
-print(_) {}
-main(A p) {
-  (p is C) && (print(() => p) && (p is B)) ? p.mc() : p = null;
-}
-''');
-  }
-
   test_typePromotion_conditional_useInThen() async {
     await assertNoErrorsInCode(r'''
 main(Object p) {
@@ -3096,50 +3065,6 @@
 ''');
   }
 
-  test_typePromotion_functionType_arg_ignoreIfNotMoreSpecific() async {
-    await assertNoErrorsInCode(r'''
-typedef FuncB(B b);
-typedef FuncA(A a);
-class A {}
-class B {}
-main(FuncA f) {
-  if (f is FuncB) {
-    f(new A());
-  }
-}
-''');
-  }
-
-  test_typePromotion_functionType_return_ignoreIfNotMoreSpecific() async {
-    await assertErrorsInCode(r'''
-class A {}
-typedef FuncAtoDyn(A a);
-typedef FuncDynToDyn(x);
-main(FuncAtoDyn f) {
-  if (f is FuncDynToDyn) {
-    A a = f(new A());
-  }
-}
-''', [
-      error(HintCode.UNUSED_LOCAL_VARIABLE, 115, 1),
-    ]);
-  }
-
-  test_typePromotion_functionType_return_voidToDynamic() async {
-    await assertErrorsInCode(r'''
-typedef FuncDynToDyn(x);
-typedef void FuncDynToVoid(x);
-class A {}
-main(FuncDynToVoid f) {
-  if (f is FuncDynToDyn) {
-    A a = f(null);
-  }
-}
-''', [
-      error(HintCode.UNUSED_LOCAL_VARIABLE, 124, 1),
-    ]);
-  }
-
   test_typePromotion_if_accessedInClosure_noAssignment() async {
     await assertNoErrorsInCode(r'''
 callMe(f()) { f(); }
@@ -3153,23 +3078,6 @@
 ''');
   }
 
-  test_typePromotion_if_extends_moreSpecific() async {
-    await assertNoErrorsInCode(r'''
-class V {}
-class VP extends V {}
-class A<T> {}
-class B<S> extends A<S> {
-  var b;
-}
-
-main(A<V> p) {
-  if (p is B<VP>) {
-    p.b;
-  }
-}
-''');
-  }
-
   test_typePromotion_if_hasAssignment_outsideAfter() async {
     await assertNoErrorsInCode(r'''
 main(Object p) {
@@ -3191,23 +3099,6 @@
 }''');
   }
 
-  test_typePromotion_if_implements_moreSpecific() async {
-    await assertNoErrorsInCode(r'''
-class V {}
-class VP extends V {}
-class A<T> {}
-class B<S> implements A<S> {
-  var b;
-}
-
-main(A<V> p) {
-  if (p is B<VP>) {
-    p.b;
-  }
-}
-''');
-  }
-
   test_typePromotion_if_inClosure_assignedAfter_inSameFunction() async {
     await assertErrorsInCode(r'''
 main() {
@@ -3373,3 +3264,144 @@
 ''');
   }
 }
+
+@reflectiveTest
+class NonErrorResolverWithoutNullSafetyTest extends PubPackageResolutionTest
+    with WithoutNullSafetyMixin, NonErrorResolverTestCases {
+  test_conflictingStaticGetterAndInstanceSetter_thisClass() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  static get x => 0;
+  static set x(int p) {}
+}
+''');
+  }
+
+  test_constEvalTypeBoolNumString_equal_null() async {
+    await assertNoErrorsInCode(r'''
+class B {
+  final v;
+  const B.n1(num p) : v = p == null;
+  const B.n2(num p) : v = null == p;
+  const B.n3(Object p) : v = p == null;
+  const B.n4(Object p) : v = null == p;
+}
+''');
+  }
+
+  test_constEvalTypeBoolNumString_notEqual_null() async {
+    await assertNoErrorsInCode('''
+class B {
+  final v;
+  const B.n1(num p) : v = p != null;
+  const B.n2(num p) : v = null != p;
+  const B.n3(Object p) : v = p != null;
+  const B.n4(Object p) : v = null != p;
+}
+''');
+  }
+
+  test_genericTypeAlias_invalidGenericFunctionType() async {
+    // There is a parse error, but no crashes.
+    await assertErrorsInCode('''
+typedef F = int;
+main(p) {
+  p is F;
+}
+''', [
+      error(ParserErrorCode.INVALID_GENERIC_FUNCTION_TYPE, 10, 1),
+    ]);
+  }
+
+  test_typePromotion_conditional_issue14655() async {
+    await assertNoErrorsInCode(r'''
+class A {}
+class B extends A {}
+class C extends B {
+  mc() {}
+}
+print(_) {}
+main(A p) {
+  (p is C) && (print(() => p) && (p is B)) ? p.mc() : p = null;
+}
+''');
+  }
+
+  test_typePromotion_functionType_arg_ignoreIfNotMoreSpecific() async {
+    await assertNoErrorsInCode(r'''
+typedef FuncB(B b);
+typedef FuncA(A a);
+class A {}
+class B {}
+main(FuncA f) {
+  if (f is FuncB) {
+    f(new A());
+  }
+}
+''');
+  }
+
+  test_typePromotion_functionType_return_ignoreIfNotMoreSpecific() async {
+    await assertErrorsInCode(r'''
+class A {}
+typedef FuncAtoDyn(A a);
+typedef FuncDynToDyn(x);
+main(FuncAtoDyn f) {
+  if (f is FuncDynToDyn) {
+    A a = f(new A());
+  }
+}
+''', [
+      error(HintCode.UNUSED_LOCAL_VARIABLE, 115, 1),
+    ]);
+  }
+
+  test_typePromotion_functionType_return_voidToDynamic() async {
+    await assertErrorsInCode(r'''
+typedef FuncDynToDyn(x);
+typedef void FuncDynToVoid(x);
+class A {}
+main(FuncDynToVoid f) {
+  if (f is FuncDynToDyn) {
+    A a = f(null);
+  }
+}
+''', [
+      error(HintCode.UNUSED_LOCAL_VARIABLE, 124, 1),
+    ]);
+  }
+
+  test_typePromotion_if_extends_moreSpecific() async {
+    await assertNoErrorsInCode(r'''
+class V {}
+class VP extends V {}
+class A<T> {}
+class B<S> extends A<S> {
+  var b;
+}
+
+main(A<V> p) {
+  if (p is B<VP>) {
+    p.b;
+  }
+}
+''');
+  }
+
+  test_typePromotion_if_implements_moreSpecific() async {
+    await assertNoErrorsInCode(r'''
+class V {}
+class VP extends V {}
+class A<T> {}
+class B<S> implements A<S> {
+  var b;
+}
+
+main(A<V> p) {
+  if (p is B<VP>) {
+    p.b;
+  }
+}
+''');
+  }
+}
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index 5d8cdd8..2ec9981 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -4589,7 +4589,7 @@
   analyzerCode: ParserErrorCode.MULTIPLE_VARIANCE_MODIFIERS
 
 VariableCouldBeNullDueToWrite:
-  template: "Variable '#name' could be null due to a write occurring here."
+  template: "Variable '#name' could be null due to an intervening write."
   tip: "Try null checking the variable after the write."
 
 FieldNotPromoted:
diff --git a/pkg/front_end/test/spell_checking_list_messages.txt b/pkg/front_end/test/spell_checking_list_messages.txt
index 04eb66f..be9adce 100644
--- a/pkg/front_end/test/spell_checking_list_messages.txt
+++ b/pkg/front_end/test/spell_checking_list_messages.txt
@@ -36,6 +36,7 @@
 h
 https
 interop
+intervening
 js_util
 libraries.json
 list.filled
diff --git a/runtime/observatory/tests/service/service_kernel.status b/runtime/observatory/tests/service/service_kernel.status
index dab0b31..81cead9 100644
--- a/runtime/observatory/tests/service/service_kernel.status
+++ b/runtime/observatory/tests/service/service_kernel.status
@@ -26,6 +26,7 @@
 evaluate_in_sync_star_activation_test: SkipByDesign # No incremental compiler available.
 evaluate_with_escaping_closure_test: SkipByDesign # No incremental compiler available.
 evaluate_with_scope_test: SkipByDesign # No incremental compiler available.
+get_allocation_traces_test: SkipByDesign # Allocation traces aren't consistent when running from snapshot.
 get_object_rpc_test: SkipByDesign # App-JIT snapshots don't contain script sources.
 pause_on_exceptions_test: SkipByDesign # No incremental compiler available.
 rewind_optimized_out_test: SkipByDesign # No incremental compiler available.
@@ -108,6 +109,7 @@
 evaluate_with_scope_test: SkipByDesign # Debugger is disabled in AOT mode.
 field_script_test: SkipByDesign # Debugger is disabled in AOT mode.
 get_allocation_samples_test: SkipByDesign # Debugger is disabled in AOT mode.
+get_allocation_traces_test: SkipByDesign # Debugger is disabled in AOT mode.
 get_object_rpc_test: SkipByDesign # Debugger is disabled in AOT mode.
 get_source_report_const_coverage_test: SkipByDesign # Debugger is disabled in AOT mode.
 get_source_report_test: SkipByDesign # Debugger is disabled in AOT mode.
@@ -290,6 +292,7 @@
 evaluate_in_frame_with_scope_test: RuntimeError # Issue #34736
 evaluate_in_sync_star_activation_test: SkipByDesign # No incremental compiler available.
 evaluate_with_scope_test: RuntimeError # Issue #34736
+get_allocation_traces_test: SkipByDesign # Stack traces are different running from snapshot.
 pause_on_exceptions_test: RuntimeError, Timeout # Issue #34736
 reload_sources_test: Skip # Times out.
 rewind_optimized_out_test: RuntimeError # Issue #34736
diff --git a/runtime/observatory_2/tests/service_2/service_2_kernel.status b/runtime/observatory_2/tests/service_2/service_2_kernel.status
index 472d995..470019e 100644
--- a/runtime/observatory_2/tests/service_2/service_2_kernel.status
+++ b/runtime/observatory_2/tests/service_2/service_2_kernel.status
@@ -26,6 +26,7 @@
 evaluate_in_sync_star_activation_test: SkipByDesign # No incremental compiler available.
 evaluate_with_escaping_closure_test: SkipByDesign # No incremental compiler available.
 evaluate_with_scope_test: SkipByDesign # No incremental compiler available.
+get_allocation_traces_test: SkipByDesign # Allocation traces aren't consistent when running from snapshot.
 get_object_rpc_test: SkipByDesign # App-JIT snapshots don't contain script sources.
 pause_on_exceptions_test: SkipByDesign # No incremental compiler available.
 rewind_optimized_out_test: SkipByDesign # No incremental compiler available.
@@ -108,6 +109,7 @@
 evaluate_with_scope_test: SkipByDesign # Debugger is disabled in AOT mode.
 field_script_test: SkipByDesign # Debugger is disabled in AOT mode.
 get_allocation_samples_test: SkipByDesign # Debugger is disabled in AOT mode.
+get_allocation_traces_test: SkipByDesign # Debugger is disabled in AOT mode.
 get_object_rpc_test: SkipByDesign # Debugger is disabled in AOT mode.
 get_source_report_const_coverage_test: SkipByDesign # Debugger is disabled in AOT mode.
 get_source_report_test: SkipByDesign # Debugger is disabled in AOT mode.
@@ -289,6 +291,7 @@
 evaluate_in_frame_with_scope_test: RuntimeError # Issue #34736
 evaluate_in_sync_star_activation_test: SkipByDesign # No incremental compiler available.
 evaluate_with_scope_test: RuntimeError # Issue #34736
+get_allocation_traces_test: SkipByDesign # Allocation traces aren't consistent when running from snapshot.
 pause_on_exceptions_test: RuntimeError, Timeout # Issue #34736
 reload_sources_test: Skip # Times out.
 rewind_optimized_out_test: RuntimeError # Issue #34736
diff --git a/tools/VERSION b/tools/VERSION
index 65a92de..5505a1f 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 13
 PATCH 0
-PRERELEASE 33
+PRERELEASE 34
 PRERELEASE_PATCH 0
\ No newline at end of file
