Update type promotion expectations

Change-Id: Iac0a99debaf751a5496df954d3221260eac47f0f
Reviewed-on: https://dart-review.googlesource.com/c/84028
Commit-Queue: Peter von der Ahé <ahe@google.com>
Commit-Queue: Kevin Millikin <kmillikin@google.com>
Auto-Submit: Peter von der Ahé <ahe@google.com>
Reviewed-by: Kevin Millikin <kmillikin@google.com>
diff --git a/pkg/front_end/test/fasta/type_promotion_look_ahead_test.dart b/pkg/front_end/test/fasta/type_promotion_look_ahead_test.dart
index 0e0e024..9fe6f56 100644
--- a/pkg/front_end/test/fasta/type_promotion_look_ahead_test.dart
+++ b/pkg/front_end/test/fasta/type_promotion_look_ahead_test.dart
@@ -146,15 +146,13 @@
 
   @override
   void registerWrite(UnspecifiedDeclaration declaration, Token token) {
-    // TODO(ahe): Call `note` instead to create expectations.
-    trace("Write to ${declaration.name}@${declaration.charOffset}", token);
+    note("Write to ${declaration.name}@${declaration.charOffset}", token);
   }
 
   @override
   void registerPromotionCandidate(
       UnspecifiedDeclaration declaration, Token token) {
-    // TODO(ahe): Call `note` instead to create expectations.
-    trace("Possible promotion of ${declaration.name}@${declaration.charOffset}",
+    note("Possible promotion of ${declaration.name}@${declaration.charOffset}",
         token);
   }
 
diff --git a/pkg/front_end/testcases/DeltaBlue.dart.type_promotion.expect b/pkg/front_end/testcases/DeltaBlue.dart.type_promotion.expect
new file mode 100644
index 0000000..d99f933
--- /dev/null
+++ b/pkg/front_end/testcases/DeltaBlue.dart.type_promotion.expect
@@ -0,0 +1,57 @@
+pkg/front_end/testcases/DeltaBlue.dart:458:20: Context: Write to overridden@13138
+        overridden = overridden.satisfy(mark));
+                   ^
+pkg/front_end/testcases/DeltaBlue.dart:479:48: Context: Write to i@14064
+      for (int i = 0; i < unsatisfied.length; i++) {
+                                               ^^
+pkg/front_end/testcases/DeltaBlue.dart:483:16: Context: Write to strength@14019
+      strength = strength.nextWeaker();
+               ^
+pkg/front_end/testcases/DeltaBlue.dart:530:46: Context: Write to i@16107
+    for (int i = 0; i < constraints.length; i++) {
+                                             ^^
+pkg/front_end/testcases/DeltaBlue.dart:578:50: Context: Write to i@17907
+      for (int i = 0; i < v.constraints.length; i++) {
+                                                 ^^
+pkg/front_end/testcases/DeltaBlue.dart:583:50: Context: Write to i@17907
+      for (int i = 0; i < v.constraints.length; i++) {
+                                                 ^^
+pkg/front_end/testcases/DeltaBlue.dart:596:48: Context: Write to i@18495
+    for (int i = 0; i < v.constraints.length; i++) {
+                                               ^^
+pkg/front_end/testcases/DeltaBlue.dart:618:39: Context: Write to i@19004
+    for (int i = 0; i < list.length; i++) {
+                                      ^^
+pkg/front_end/testcases/DeltaBlue.dart:641:28: Context: Write to i@19938
+  for (int i = 0; i <= n; i++) {
+                           ^^
+pkg/front_end/testcases/DeltaBlue.dart:644:23: Context: Write to first@19856
+    if (i == 0) first = v;
+                      ^
+pkg/front_end/testcases/DeltaBlue.dart:645:22: Context: Write to last@19870
+    if (i == n) last = v;
+                     ^
+pkg/front_end/testcases/DeltaBlue.dart:646:10: Context: Write to prev@19843
+    prev = v;
+         ^
+pkg/front_end/testcases/DeltaBlue.dart:651:29: Context: Write to i@19938
+  for (int i = 0; i < 100; i++) {
+                            ^^
+pkg/front_end/testcases/DeltaBlue.dart:674:27: Context: Write to i@21029
+  for (int i = 0; i < n; i++) {
+                          ^^
+pkg/front_end/testcases/DeltaBlue.dart:675:9: Context: Write to src@20954
+    src = new Variable("src", i);
+        ^
+pkg/front_end/testcases/DeltaBlue.dart:676:9: Context: Write to dst@20966
+    dst = new Variable("dst", i);
+        ^
+pkg/front_end/testcases/DeltaBlue.dart:686:31: Context: Write to i@21029
+  for (int i = 0; i < n - 1; i++) {
+                              ^^
+pkg/front_end/testcases/DeltaBlue.dart:690:31: Context: Write to i@21029
+  for (int i = 0; i < n - 1; i++) {
+                              ^^
+pkg/front_end/testcases/DeltaBlue.dart:698:28: Context: Write to i@21836
+  for (int i = 0; i < 10; i++) {
+                           ^^
diff --git a/pkg/front_end/testcases/arithmetic.dart.type_promotion.expect b/pkg/front_end/testcases/arithmetic.dart.type_promotion.expect
new file mode 100644
index 0000000..8a5a7db
--- /dev/null
+++ b/pkg/front_end/testcases/arithmetic.dart.type_promotion.expect
@@ -0,0 +1,3 @@
+pkg/front_end/testcases/arithmetic.dart:11:35: Context: Write to i@330
+  for (int i = 0; i < xs.length; i++) {}
+                                  ^^
diff --git a/pkg/front_end/testcases/bad_setter_abstract.dart.type_promotion.expect b/pkg/front_end/testcases/bad_setter_abstract.dart.type_promotion.expect
new file mode 100644
index 0000000..adc877f
--- /dev/null
+++ b/pkg/front_end/testcases/bad_setter_abstract.dart.type_promotion.expect
@@ -0,0 +1,30 @@
+pkg/front_end/testcases/bad_setter_abstract.dart:22:11: Context: Write to threw@344
+    threw = true;
+          ^
+pkg/front_end/testcases/bad_setter_abstract.dart:24:11: Context: Write to threw@344
+    threw = false;
+          ^
+pkg/front_end/testcases/bad_setter_abstract.dart:32:11: Context: Write to threw@344
+    threw = true;
+          ^
+pkg/front_end/testcases/bad_setter_abstract.dart:34:11: Context: Write to threw@344
+    threw = false;
+          ^
+pkg/front_end/testcases/bad_setter_abstract.dart:42:11: Context: Write to threw@344
+    threw = true;
+          ^
+pkg/front_end/testcases/bad_setter_abstract.dart:44:11: Context: Write to threw@344
+    threw = false;
+          ^
+pkg/front_end/testcases/bad_setter_abstract.dart:55:11: Context: Write to threw@344
+    threw = true;
+          ^
+pkg/front_end/testcases/bad_setter_abstract.dart:57:11: Context: Write to threw@344
+    threw = false;
+          ^
+pkg/front_end/testcases/bad_setter_abstract.dart:65:11: Context: Write to threw@344
+    threw = true;
+          ^
+pkg/front_end/testcases/bad_setter_abstract.dart:67:11: Context: Write to threw@344
+    threw = false;
+          ^
diff --git a/pkg/front_end/testcases/bug32414a.dart.type_promotion.expect b/pkg/front_end/testcases/bug32414a.dart.type_promotion.expect
new file mode 100644
index 0000000..6f70c2d
--- /dev/null
+++ b/pkg/front_end/testcases/bug32414a.dart.type_promotion.expect
@@ -0,0 +1,3 @@
+pkg/front_end/testcases/bug32414a.dart:10:5: Context: Write to b@302
+  b = 42;
+    ^
diff --git a/pkg/front_end/testcases/cascade.dart.type_promotion.expect b/pkg/front_end/testcases/cascade.dart.type_promotion.expect
new file mode 100644
index 0000000..3d3e899
--- /dev/null
+++ b/pkg/front_end/testcases/cascade.dart.type_promotion.expect
@@ -0,0 +1,3 @@
+pkg/front_end/testcases/cascade.dart:25:8: Context: Write to list@232
+  list = [
+       ^
diff --git a/pkg/front_end/testcases/check_deferred_is_check.dart.type_promotion.expect b/pkg/front_end/testcases/check_deferred_is_check.dart.type_promotion.expect
new file mode 100644
index 0000000..fbbe754
--- /dev/null
+++ b/pkg/front_end/testcases/check_deferred_is_check.dart.type_promotion.expect
@@ -0,0 +1,3 @@
+pkg/front_end/testcases/check_deferred_is_check.dart:9:11: Context: Possible promotion of x@279
+  print(x is lib.C);
+          ^^
diff --git a/pkg/front_end/testcases/closure.dart.type_promotion.expect b/pkg/front_end/testcases/closure.dart.type_promotion.expect
new file mode 100644
index 0000000..a0203a7
--- /dev/null
+++ b/pkg/front_end/testcases/closure.dart.type_promotion.expect
@@ -0,0 +1,3 @@
+pkg/front_end/testcases/closure.dart:18:7: Context: Write to x@336
+    x = new Foo();
+      ^
diff --git a/pkg/front_end/testcases/escape.dart.type_promotion.expect b/pkg/front_end/testcases/escape.dart.type_promotion.expect
new file mode 100644
index 0000000..ff163e6
--- /dev/null
+++ b/pkg/front_end/testcases/escape.dart.type_promotion.expect
@@ -0,0 +1,6 @@
+pkg/front_end/testcases/escape.dart:31:5: Context: Write to x@483
+  x ??= "";
+    ^^^
+pkg/front_end/testcases/escape.dart:32:5: Context: Write to x@483
+  x ??= 45;
+    ^^^
diff --git a/pkg/front_end/testcases/expressions.dart.type_promotion.expect b/pkg/front_end/testcases/expressions.dart.type_promotion.expect
new file mode 100644
index 0000000..3692c63
--- /dev/null
+++ b/pkg/front_end/testcases/expressions.dart.type_promotion.expect
@@ -0,0 +1,15 @@
+pkg/front_end/testcases/expressions.dart:34:5: Context: Write to i@286
+  i = 87;
+    ^
+pkg/front_end/testcases/expressions.dart:38:9: Context: Write to i@286
+  print(--i);
+        ^^
+pkg/front_end/testcases/expressions.dart:39:9: Context: Write to i@286
+  print(++i);
+        ^^
+pkg/front_end/testcases/expressions.dart:40:10: Context: Write to i@286
+  print(i--);
+         ^^
+pkg/front_end/testcases/expressions.dart:41:10: Context: Write to i@286
+  print(i++);
+         ^^
diff --git a/pkg/front_end/testcases/fallthrough.dart.type_promotion.expect b/pkg/front_end/testcases/fallthrough.dart.type_promotion.expect
new file mode 100644
index 0000000..a753f8b
--- /dev/null
+++ b/pkg/front_end/testcases/fallthrough.dart.type_promotion.expect
@@ -0,0 +1,3 @@
+pkg/front_end/testcases/fallthrough.dart:9:9: Context: Write to x@254
+      x = 4;
+        ^
diff --git a/pkg/front_end/testcases/fibonacci.dart.type_promotion.expect b/pkg/front_end/testcases/fibonacci.dart.type_promotion.expect
new file mode 100644
index 0000000..42ffb08
--- /dev/null
+++ b/pkg/front_end/testcases/fibonacci.dart.type_promotion.expect
@@ -0,0 +1,3 @@
+pkg/front_end/testcases/fibonacci.dart:11:28: Context: Write to i@332
+  for (int i = 0; i < 20; i++) {
+                           ^^
diff --git a/pkg/front_end/testcases/function_type_is_check.dart.type_promotion.expect b/pkg/front_end/testcases/function_type_is_check.dart.type_promotion.expect
new file mode 100644
index 0000000..9ad971a
--- /dev/null
+++ b/pkg/front_end/testcases/function_type_is_check.dart.type_promotion.expect
@@ -0,0 +1,9 @@
+pkg/front_end/testcases/function_type_is_check.dart:8:9: Context: Possible promotion of f@272
+  if (f is void Function(Object, StackTrace)) return 1;
+        ^^
+pkg/front_end/testcases/function_type_is_check.dart:9:9: Context: Possible promotion of f@272
+  if (f is void Function(Object)) return 10;
+        ^^
+pkg/front_end/testcases/function_type_is_check.dart:10:9: Context: Possible promotion of f@272
+  if (f is void Function()) return 100;
+        ^^
diff --git a/pkg/front_end/testcases/implicit_new.dart.type_promotion.expect b/pkg/front_end/testcases/implicit_new.dart.type_promotion.expect
new file mode 100644
index 0000000..33f7ebc
--- /dev/null
+++ b/pkg/front_end/testcases/implicit_new.dart.type_promotion.expect
@@ -0,0 +1,12 @@
+pkg/front_end/testcases/implicit_new.dart:31:5: Context: Write to x@522
+  x = prefix.Foo();
+    ^
+pkg/front_end/testcases/implicit_new.dart:33:5: Context: Write to z@559
+  z = prefix.Bar.named();
+    ^
+pkg/front_end/testcases/implicit_new.dart:39:5: Context: Write to l@682
+  l = [prefix.Foo(), prefix.Bar.named()];
+    ^
+pkg/front_end/testcases/implicit_new.dart:41:5: Context: Write to m@756
+  m = {"foo": prefix.Foo(), "bar": prefix.Bar.named()};
+    ^
diff --git a/pkg/front_end/testcases/implicit_scope_test.dart.type_promotion.expect b/pkg/front_end/testcases/implicit_scope_test.dart.type_promotion.expect
new file mode 100644
index 0000000..cf8d11a
--- /dev/null
+++ b/pkg/front_end/testcases/implicit_scope_test.dart.type_promotion.expect
@@ -0,0 +1,3 @@
+pkg/front_end/testcases/implicit_scope_test.dart:28:30: Context: Write to i@736
+    for (int i = 0; i < 10; i++) var a = "bar", b = "baz";
+                             ^^
diff --git a/pkg/front_end/testcases/inference/assign_local.dart.type_promotion.expect b/pkg/front_end/testcases/inference/assign_local.dart.type_promotion.expect
new file mode 100644
index 0000000..f49cffea
--- /dev/null
+++ b/pkg/front_end/testcases/inference/assign_local.dart.type_promotion.expect
@@ -0,0 +1,12 @@
+pkg/front_end/testcases/inference/assign_local.dart:14:29: Context: Write to x@320
+  var /*@type=int*/ x1 = (x = 1);
+                            ^
+pkg/front_end/testcases/inference/assign_local.dart:15:32: Context: Write to x@320
+  var /*@type=double*/ x2 = (x = 1.0);
+                               ^
+pkg/front_end/testcases/inference/assign_local.dart:18:32: Context: Write to y@406
+  var /*@type=A<int>*/ y1 = (y = new /*@typeArgs=int*/ A());
+                               ^
+pkg/front_end/testcases/inference/assign_local.dart:19:32: Context: Write to y@406
+  var /*@type=B<int>*/ y2 = (y = new /*@typeArgs=int*/ B());
+                               ^
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.type_promotion.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.type_promotion.expect
new file mode 100644
index 0000000..d05a1c0
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.type_promotion.expect
@@ -0,0 +1,3 @@
+pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart:11:5: Context: Write to g@322
+  g = /*@returnType=String*/ () {
+    ^
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync.dart.type_promotion.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync.dart.type_promotion.expect
new file mode 100644
index 0000000..2c4de0d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync.dart.type_promotion.expect
@@ -0,0 +1,3 @@
+pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync.dart:17:5: Context: Write to f@369
+  f = /*error:INVALID_CAST_FUNCTION_EXPR*/ /*@returnType=Null*/ (/*@type=Object*/ x) =>
+    ^
diff --git a/pkg/front_end/testcases/inference/bug30620.dart.type_promotion.expect b/pkg/front_end/testcases/inference/bug30620.dart.type_promotion.expect
new file mode 100644
index 0000000..f995931
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug30620.dart.type_promotion.expect
@@ -0,0 +1,3 @@
+pkg/front_end/testcases/inference/bug30620.dart:14:13: Context: Possible promotion of other@335
+      other is A && /*@promotedType=A*/ other
+            ^^
diff --git a/pkg/front_end/testcases/inference/bug30620_b.dart.type_promotion.expect b/pkg/front_end/testcases/inference/bug30620_b.dart.type_promotion.expect
new file mode 100644
index 0000000..85cca67
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug30620_b.dart.type_promotion.expect
@@ -0,0 +1,3 @@
+pkg/front_end/testcases/inference/bug30620_b.dart:14:13: Context: Possible promotion of other@335
+      other is A && /*@promotedType=A*/ other
+            ^^
diff --git a/pkg/front_end/testcases/inference/bug30620_c.dart.type_promotion.expect b/pkg/front_end/testcases/inference/bug30620_c.dart.type_promotion.expect
new file mode 100644
index 0000000..3a22ae1
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug30620_c.dart.type_promotion.expect
@@ -0,0 +1,3 @@
+pkg/front_end/testcases/inference/bug30620_c.dart:14:15: Context: Possible promotion of other@335
+    if (other is A && /*@promotedType=A*/ other
+              ^^
diff --git a/pkg/front_end/testcases/inference/bug30620_d.dart.type_promotion.expect b/pkg/front_end/testcases/inference/bug30620_d.dart.type_promotion.expect
new file mode 100644
index 0000000..bdbeb50
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug30620_d.dart.type_promotion.expect
@@ -0,0 +1,3 @@
+pkg/front_end/testcases/inference/bug30620_d.dart:8:24: Context: Possible promotion of obj@273
+String foo(obj) => obj is String
+                       ^^
diff --git a/pkg/front_end/testcases/inference/bug31132.dart.type_promotion.expect b/pkg/front_end/testcases/inference/bug31132.dart.type_promotion.expect
new file mode 100644
index 0000000..101f24d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug31132.dart.type_promotion.expect
@@ -0,0 +1,3 @@
+pkg/front_end/testcases/inference/bug31132.dart:15:25: Context: Possible promotion of x@339
+  var /*@type=C*/ y = x is C ? /*@promotedType=C*/ x : new C();
+                        ^^
diff --git a/pkg/front_end/testcases/inference/bug31133.dart.type_promotion.expect b/pkg/front_end/testcases/inference/bug31133.dart.type_promotion.expect
new file mode 100644
index 0000000..51f05ad
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug31133.dart.type_promotion.expect
@@ -0,0 +1,24 @@
+pkg/front_end/testcases/inference/bug31133.dart:10:9: Context: Write to i@296
+  for (i++; i /*@target=num::<*/ < 10; i++) {}
+        ^^
+pkg/front_end/testcases/inference/bug31133.dart:10:41: Context: Write to i@296
+  for (i++; i /*@target=num::<*/ < 10; i++) {}
+                                        ^^
+pkg/front_end/testcases/inference/bug31133.dart:11:8: Context: Write to i@296
+  for (++i; i /*@target=num::<*/ < 10; i++) {}
+       ^^
+pkg/front_end/testcases/inference/bug31133.dart:11:41: Context: Write to i@296
+  for (++i; i /*@target=num::<*/ < 10; i++) {}
+                                        ^^
+pkg/front_end/testcases/inference/bug31133.dart:12:9: Context: Write to i@296
+  for (i--; i /*@target=num::>=*/ >= 0; i--) {}
+        ^^
+pkg/front_end/testcases/inference/bug31133.dart:12:42: Context: Write to i@296
+  for (i--; i /*@target=num::>=*/ >= 0; i--) {}
+                                         ^^
+pkg/front_end/testcases/inference/bug31133.dart:13:8: Context: Write to i@296
+  for (--i; i /*@target=num::>=*/ >= 0; i--) {}
+       ^^
+pkg/front_end/testcases/inference/bug31133.dart:13:42: Context: Write to i@296
+  for (--i; i /*@target=num::>=*/ >= 0; i--) {}
+                                         ^^
diff --git a/pkg/front_end/testcases/inference/bug31436.dart.type_promotion.expect b/pkg/front_end/testcases/inference/bug31436.dart.type_promotion.expect
new file mode 100644
index 0000000..c01ee24
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug31436.dart.type_promotion.expect
@@ -0,0 +1,48 @@
+pkg/front_end/testcases/inference/bug31436.dart:10:5: Context: Write to g@308
+  g = /*@returnType=List<Object>*/ () {
+    ^
+pkg/front_end/testcases/inference/bug31436.dart:13:12: Context: Possible promotion of g@308
+  assert(g is List<Object> Function());
+           ^^
+pkg/front_end/testcases/inference/bug31436.dart:17:5: Context: Write to g@308
+  g = /*@returnType=List<int>*/ () {
+    ^
+pkg/front_end/testcases/inference/bug31436.dart:20:12: Context: Possible promotion of g@308
+  assert(g is List<Object> Function());
+           ^^
+pkg/front_end/testcases/inference/bug31436.dart:21:12: Context: Possible promotion of g@308
+  assert(g is List<int> Function());
+           ^^
+pkg/front_end/testcases/inference/bug31436.dart:27:5: Context: Write to g@308
+  g = /*@returnType=List<Object>*/ () {
+    ^
+pkg/front_end/testcases/inference/bug31436.dart:30:12: Context: Possible promotion of g@308
+  assert(g is List<Object> Function());
+           ^^
+pkg/front_end/testcases/inference/bug31436.dart:34:5: Context: Write to o@843
+  o = 3;
+    ^
+pkg/front_end/testcases/inference/bug31436.dart:43:5: Context: Write to g@1305
+  g = /*@returnType=List<Object>*/ () => /*@typeArgs=Object*/ [3];
+    ^
+pkg/front_end/testcases/inference/bug31436.dart:44:12: Context: Possible promotion of g@1305
+  assert(g is List<Object> Function());
+           ^^
+pkg/front_end/testcases/inference/bug31436.dart:48:5: Context: Write to g@1305
+  g = /*@returnType=List<int>*/ () => l;
+    ^
+pkg/front_end/testcases/inference/bug31436.dart:49:12: Context: Possible promotion of g@1305
+  assert(g is List<Object> Function());
+           ^^
+pkg/front_end/testcases/inference/bug31436.dart:50:12: Context: Possible promotion of g@1305
+  assert(g is List<int> Function());
+           ^^
+pkg/front_end/testcases/inference/bug31436.dart:56:5: Context: Write to g@1305
+  g = /*@returnType=List<Object>*/ () =>
+    ^
+pkg/front_end/testcases/inference/bug31436.dart:58:12: Context: Possible promotion of g@1305
+  assert(g is List<Object> Function());
+           ^^
+pkg/front_end/testcases/inference/bug31436.dart:62:5: Context: Write to o@1810
+  o = 3;
+    ^
diff --git a/pkg/front_end/testcases/inference/dont_infer_type_on_dynamic.dart.type_promotion.expect b/pkg/front_end/testcases/inference/dont_infer_type_on_dynamic.dart.type_promotion.expect
new file mode 100644
index 0000000..1d0fb56
--- /dev/null
+++ b/pkg/front_end/testcases/inference/dont_infer_type_on_dynamic.dart.type_promotion.expect
@@ -0,0 +1,3 @@
+pkg/front_end/testcases/inference/dont_infer_type_on_dynamic.dart:10:5: Context: Write to x@281
+  x = "hi";
+    ^
diff --git a/pkg/front_end/testcases/inference/dont_infer_type_when_initializer_is_null.dart.type_promotion.expect b/pkg/front_end/testcases/inference/dont_infer_type_when_initializer_is_null.dart.type_promotion.expect
new file mode 100644
index 0000000..e2bfbdc
--- /dev/null
+++ b/pkg/front_end/testcases/inference/dont_infer_type_when_initializer_is_null.dart.type_promotion.expect
@@ -0,0 +1,6 @@
+pkg/front_end/testcases/inference/dont_infer_type_when_initializer_is_null.dart:10:5: Context: Write to x@295
+  x = "hi";
+    ^
+pkg/front_end/testcases/inference/dont_infer_type_when_initializer_is_null.dart:11:5: Context: Write to x@295
+  x = 3;
+    ^
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_for_loop_variable.dart.type_promotion.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_for_loop_variable.dart.type_promotion.expect
new file mode 100644
index 0000000..6b72671
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_for_loop_variable.dart.type_promotion.expect
@@ -0,0 +1,3 @@
+pkg/front_end/testcases/inference/downwards_inference_annotations_for_loop_variable.dart:14:34: Context: Write to i@367
+       i /*@target=num::<*/< 1; i++) {}
+                                 ^^
diff --git a/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.type_promotion.expect b/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.type_promotion.expect
new file mode 100644
index 0000000..c96c4a6
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.type_promotion.expect
@@ -0,0 +1,9 @@
+pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart:10:5: Context: Write to l@288
+  l = /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"];
+    ^
+pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart:11:10: Context: Write to l@288
+  l = (l = /*@typeArgs=int*/ [1]);
+         ^
+pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart:11:5: Context: Write to l@288
+  l = (l = /*@typeArgs=int*/ [1]);
+    ^
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_of_t_using_the_t.dart.type_promotion.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_of_t_using_the_t.dart.type_promotion.expect
new file mode 100644
index 0000000..d06c6eb
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_of_t_using_the_t.dart.type_promotion.expect
@@ -0,0 +1,6 @@
+pkg/front_end/testcases/inference/downwards_inference_on_function_of_t_using_the_t.dart:12:8: Context: Write to v1@368
+    v1 = <S> /*@returnType=main::::S*/ (/*@type=main::::S*/ x) => x;
+       ^
+pkg/front_end/testcases/inference/downwards_inference_on_function_of_t_using_the_t.dart:17:8: Context: Write to v2@553
+    v2 = <S> /*@returnType=List<main::::S>*/
+       ^
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.type_promotion.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.type_promotion.expect
new file mode 100644
index 0000000..419aa7c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.type_promotion.expect
@@ -0,0 +1,60 @@
+pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:12:7: Context: Write to v@374
+    v = <T> /*@returnType=Null*/ (int x) => null;
+      ^
+pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:13:7: Context: Write to v@374
+    v = <T> /*@returnType=String*/ (int x) => "hello";
+      ^
+pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:14:7: Context: Write to v@374
+    v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=String*/ (String x) =>
+      ^
+pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:16:7: Context: Write to v@374
+    v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=String*/ (int x) => 3;
+      ^
+pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:17:7: Context: Write to v@374
+    v = <T> /*@returnType=String*/ (int x) {
+      ^
+pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:24:7: Context: Write to v@862
+    v = <T> /*@returnType=Null*/ (/*@type=int*/ x) => null;
+      ^
+pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:25:7: Context: Write to v@862
+    v = <T> /*@returnType=String*/ (/*@type=int*/ x) => "hello";
+      ^
+pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:26:7: Context: Write to v@862
+    v = /*info:INFERRED_TYPE_CLOSURE, error:INVALID_ASSIGNMENT*/ <
+      ^
+pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:29:7: Context: Write to v@862
+    v = <T> /*@returnType=String*/ (/*@type=int*/ x) {
+      ^
+pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:32:7: Context: Write to v@862
+    v = <T> /*@returnType=String*/ (/*@type=int*/ x) {
+      ^
+pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:39:7: Context: Write to v@1467
+    v = <T> /*@returnType=Null*/ (int x) => null;
+      ^
+pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:40:7: Context: Write to v@1467
+    v = <T> /*@returnType=List<String>*/ (int x) => /*@typeArgs=String*/ [
+      ^
+pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:43:7: Context: Write to v@1467
+    v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=List<String>*/ (String
+      ^
+pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:45:7: Context: Write to v@1467
+    v = <T> /*@returnType=List<String>*/ (int x) => /*@typeArgs=String*/ [
+      ^
+pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:48:7: Context: Write to v@1467
+    v = <T> /*@returnType=List<String>*/ (int x) {
+      ^
+pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:59:7: Context: Write to x@2239
+    x = <T> /*@returnType=int*/ (/*@type=int*/ x) => x;
+      ^
+pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:60:7: Context: Write to x@2239
+    x = <T> /*@returnType=int*/ (/*@type=int*/ x) => x /*@target=num::+*/ + 1;
+      ^
+pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:62:7: Context: Write to y@2449
+    y = /*info:INFERRED_TYPE_CLOSURE, error:INVALID_ASSIGNMENT*/ <
+      ^
+pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:65:7: Context: Write to y@2449
+    y = <T> /*@returnType=String*/ (/*@type=int*/ x) => /*info:DYNAMIC_INVOKE, info:DYNAMIC_CAST*/ x
+      ^
+pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:69:7: Context: Write to z@2791
+    z = <T> /*@returnType=String*/ (/*@type=String*/ x) =>
+      ^
diff --git a/pkg/front_end/testcases/inference/for_in_loop_promotion.dart.type_promotion.expect b/pkg/front_end/testcases/inference/for_in_loop_promotion.dart.type_promotion.expect
new file mode 100644
index 0000000..b5fe65a
--- /dev/null
+++ b/pkg/front_end/testcases/inference/for_in_loop_promotion.dart.type_promotion.expect
@@ -0,0 +1,3 @@
+pkg/front_end/testcases/inference/for_in_loop_promotion.dart:10:11: Context: Possible promotion of x@315
+    if (x is int) {
+          ^^
diff --git a/pkg/front_end/testcases/inference/for_loop_empty_condition.dart.type_promotion.expect b/pkg/front_end/testcases/inference/for_loop_empty_condition.dart.type_promotion.expect
new file mode 100644
index 0000000..8598d0c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/for_loop_empty_condition.dart.type_promotion.expect
@@ -0,0 +1,6 @@
+pkg/front_end/testcases/inference/for_loop_empty_condition.dart:9:21: Context: Write to x@287
+  for (num x = 0;; x++) {
+                    ^^
+pkg/front_end/testcases/inference/for_loop_empty_condition.dart:11:11: Context: Possible promotion of x@287
+    if (x is int) {
+          ^^
diff --git a/pkg/front_end/testcases/inference/for_loop_initializer_expression.dart.type_promotion.expect b/pkg/front_end/testcases/inference/for_loop_initializer_expression.dart.type_promotion.expect
new file mode 100644
index 0000000..84d17d3
--- /dev/null
+++ b/pkg/front_end/testcases/inference/for_loop_initializer_expression.dart.type_promotion.expect
@@ -0,0 +1,9 @@
+pkg/front_end/testcases/inference/for_loop_initializer_expression.dart:10:10: Context: Write to x@282
+  for (x = 0; x /*@target=num::<*/ < 10; x++) {
+         ^
+pkg/front_end/testcases/inference/for_loop_initializer_expression.dart:10:43: Context: Write to x@282
+  for (x = 0; x /*@target=num::<*/ < 10; x++) {
+                                          ^^
+pkg/front_end/testcases/inference/for_loop_initializer_expression.dart:11:11: Context: Possible promotion of x@282
+    if (x is int) {
+          ^^
diff --git a/pkg/front_end/testcases/inference/for_loop_promotion.dart.type_promotion.expect b/pkg/front_end/testcases/inference/for_loop_promotion.dart.type_promotion.expect
new file mode 100644
index 0000000..5cf87fe
--- /dev/null
+++ b/pkg/front_end/testcases/inference/for_loop_promotion.dart.type_promotion.expect
@@ -0,0 +1,6 @@
+pkg/front_end/testcases/inference/for_loop_promotion.dart:9:47: Context: Write to x@287
+  for (num x = 0; x /*@target=num::<*/ < 10; x++) {
+                                              ^^
+pkg/front_end/testcases/inference/for_loop_promotion.dart:10:11: Context: Possible promotion of x@287
+    if (x is int) {
+          ^^
diff --git a/pkg/front_end/testcases/inference/future_then_downwards_method_target.dart.type_promotion.expect b/pkg/front_end/testcases/inference/future_then_downwards_method_target.dart.type_promotion.expect
new file mode 100644
index 0000000..e254cf4
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_downwards_method_target.dart.type_promotion.expect
@@ -0,0 +1,3 @@
+pkg/front_end/testcases/inference/future_then_downwards_method_target.dart:17:5: Context: Write to b@330
+  b = f. /*@typeArgs=List<int>*/ /*@target=Future::then*/ then(
+    ^
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_from_block.dart.type_promotion.expect b/pkg/front_end/testcases/inference/future_then_upwards_from_block.dart.type_promotion.expect
new file mode 100644
index 0000000..b9275fa64
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_upwards_from_block.dart.type_promotion.expect
@@ -0,0 +1,3 @@
+pkg/front_end/testcases/inference/future_then_upwards_from_block.dart:21:5: Context: Write to b@695
+  b = g;
+    ^
diff --git a/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart.type_promotion.expect b/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart.type_promotion.expect
new file mode 100644
index 0000000..8c6d411
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart.type_promotion.expect
@@ -0,0 +1,3 @@
+pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart:18:8: Context: Write to list@682
+  list = result2;
+       ^
diff --git a/pkg/front_end/testcases/inference/generic_functions_return_typedef.dart.type_promotion.expect b/pkg/front_end/testcases/inference/generic_functions_return_typedef.dart.type_promotion.expect
new file mode 100644
index 0000000..b9f3609
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_functions_return_typedef.dart.type_promotion.expect
@@ -0,0 +1,3 @@
+pkg/front_end/testcases/inference/generic_functions_return_typedef.dart:15:12: Context: Write to takesInt@458
+  takesInt = y;
+           ^
diff --git a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.type_promotion.expect b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.type_promotion.expect
new file mode 100644
index 0000000..6793864
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.type_promotion.expect
@@ -0,0 +1,6 @@
+pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart:20:5: Context: Write to y@436
+  y = /*info:DYNAMIC_CAST*/ z;
+    ^
+pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart:35:5: Context: Write to y@941
+  y = /*info:DYNAMIC_CAST*/ z;
+    ^
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart.type_promotion.expect b/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart.type_promotion.expect
new file mode 100644
index 0000000..7e3d35f
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart.type_promotion.expect
@@ -0,0 +1,6 @@
+pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart:13:5: Context: Write to y@427
+  y = "world";
+    ^
+pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart:14:5: Context: Write to y@427
+  y = /*error:INVALID_ASSIGNMENT*/ 42;
+    ^
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_local.dart.type_promotion.expect b/pkg/front_end/testcases/inference/infer_assign_to_local.dart.type_promotion.expect
new file mode 100644
index 0000000..b6004bf
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_local.dart.type_promotion.expect
@@ -0,0 +1,39 @@
+pkg/front_end/testcases/inference/infer_assign_to_local.dart:23:9: Context: Write to local@474
+  local = /*@typeArgs=B*/ f();
+        ^
+pkg/front_end/testcases/inference/infer_assign_to_local.dart:24:9: Context: Write to local@474
+  local ??= /*@typeArgs=B*/ f();
+        ^^^
+pkg/front_end/testcases/inference/infer_assign_to_local.dart:25:9: Context: Write to local@474
+  local += /*@typeArgs=dynamic*/ f();
+        ^^
+pkg/front_end/testcases/inference/infer_assign_to_local.dart:26:9: Context: Write to local@474
+  local *= /*@typeArgs=dynamic*/ f();
+        ^^
+pkg/front_end/testcases/inference/infer_assign_to_local.dart:27:9: Context: Write to local@474
+  local &= /*@typeArgs=dynamic*/ f();
+        ^^
+pkg/front_end/testcases/inference/infer_assign_to_local.dart:28:3: Context: Write to local@474
+  --local;
+  ^^
+pkg/front_end/testcases/inference/infer_assign_to_local.dart:29:8: Context: Write to local@474
+  local--;
+       ^^
+pkg/front_end/testcases/inference/infer_assign_to_local.dart:30:30: Context: Write to local@474
+  var /*@type=B*/ v1 = local = /*@typeArgs=B*/ f();
+                             ^
+pkg/front_end/testcases/inference/infer_assign_to_local.dart:31:30: Context: Write to local@474
+  var /*@type=B*/ v2 = local ??= /*@typeArgs=B*/ f();
+                             ^^^
+pkg/front_end/testcases/inference/infer_assign_to_local.dart:32:30: Context: Write to local@474
+  var /*@type=B*/ v4 = local *= /*@typeArgs=dynamic*/ f();
+                             ^^
+pkg/front_end/testcases/inference/infer_assign_to_local.dart:33:30: Context: Write to local@474
+  var /*@type=C*/ v5 = local &= /*@typeArgs=dynamic*/ f();
+                             ^^
+pkg/front_end/testcases/inference/infer_assign_to_local.dart:34:24: Context: Write to local@474
+  var /*@type=B*/ v6 = --local;
+                       ^^
+pkg/front_end/testcases/inference/infer_assign_to_local.dart:35:29: Context: Write to local@474
+  var /*@type=B*/ v7 = local--;
+                            ^^
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart.type_promotion.expect b/pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart.type_promotion.expect
new file mode 100644
index 0000000..0bddfc5
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart.type_promotion.expect
@@ -0,0 +1,69 @@
+pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart:13:28: Context: Write to t@343
+  var /*@type=int*/ v1 = t = getInt();
+                           ^
+pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart:14:28: Context: Write to t@343
+  var /*@type=int*/ v4 = t ??= getInt();
+                           ^^^
+pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart:15:28: Context: Write to t@343
+  var /*@type=int*/ v7 = t += getInt();
+                           ^^
+pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart:16:27: Context: Write to t@343
+  var /*@type=int*/ v10 = ++t;
+                          ^^
+pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart:17:28: Context: Write to t@343
+  var /*@type=int*/ v11 = t++;
+                           ^^
+pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart:21:28: Context: Write to t@343
+  var /*@type=int*/ v1 = t = getInt();
+                           ^
+pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart:22:28: Context: Write to t@343
+  var /*@type=num*/ v2 = t = getNum();
+                           ^
+pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart:23:31: Context: Write to t@343
+  var /*@type=double*/ v3 = t = getDouble();
+                              ^
+pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart:24:28: Context: Write to t@343
+  var /*@type=num*/ v4 = t ??= getInt();
+                           ^^^
+pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart:25:28: Context: Write to t@343
+  var /*@type=num*/ v5 = t ??= getNum();
+                           ^^^
+pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart:26:28: Context: Write to t@343
+  var /*@type=num*/ v6 = t ??= getDouble();
+                           ^^^
+pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart:27:28: Context: Write to t@343
+  var /*@type=num*/ v7 = t += getInt();
+                           ^^
+pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart:28:28: Context: Write to t@343
+  var /*@type=num*/ v8 = t += getNum();
+                           ^^
+pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart:29:28: Context: Write to t@343
+  var /*@type=num*/ v9 = t += getDouble();
+                           ^^
+pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart:30:27: Context: Write to t@343
+  var /*@type=num*/ v10 = ++t;
+                          ^^
+pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart:31:28: Context: Write to t@343
+  var /*@type=num*/ v11 = t++;
+                           ^^
+pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart:35:31: Context: Write to t@343
+  var /*@type=double*/ v3 = t = getDouble();
+                              ^
+pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart:36:31: Context: Write to t@343
+  var /*@type=double*/ v6 = t ??= getDouble();
+                              ^^^
+pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart:37:31: Context: Write to t@343
+  var /*@type=double*/ v7 = t += getInt();
+                              ^^
+pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart:38:31: Context: Write to t@343
+  var /*@type=double*/ v8 = t += getNum();
+                              ^^
+pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart:39:31: Context: Write to t@343
+  var /*@type=double*/ v9 = t += getDouble();
+                              ^^
+pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart:40:30: Context: Write to t@343
+  var /*@type=double*/ v10 = ++t;
+                             ^^
+pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart:41:31: Context: Write to t@343
+  var /*@type=double*/ v11 = t++;
+                              ^^
diff --git a/pkg/front_end/testcases/inference/infer_consts_transitively_2.dart.type_promotion.expect b/pkg/front_end/testcases/inference/infer_consts_transitively_2.dart.type_promotion.expect
new file mode 100644
index 0000000..3628855
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_consts_transitively_2.dart.type_promotion.expect
@@ -0,0 +1,3 @@
+pkg/front_end/testcases/inference/infer_consts_transitively_2.dart:15:5: Context: Write to i@387
+  i = m1;
+    ^
diff --git a/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.type_promotion.expect b/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.type_promotion.expect
new file mode 100644
index 0000000..7c9fd70
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.type_promotion.expect
@@ -0,0 +1,24 @@
+pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:25:5: Context: Write to s@537
+  s = /*info:DYNAMIC_CAST*/ new B(). /*@target=B::x*/ x;
+    ^
+pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:26:5: Context: Write to s@537
+  s = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::y*/ y;
+    ^
+pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:27:5: Context: Write to s@537
+  s = new B(). /*@target=B::z*/ z;
+    ^
+pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:28:5: Context: Write to s@537
+  s = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::w*/ w;
+    ^
+pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:30:5: Context: Write to i@546
+  i = /*info:DYNAMIC_CAST*/ new B(). /*@target=B::x*/ x;
+    ^
+pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:31:5: Context: Write to i@546
+  i = new B(). /*@target=B::y*/ y;
+    ^
+pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:32:5: Context: Write to i@546
+  i = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::z*/ z;
+    ^
+pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:33:5: Context: Write to i@546
+  i = new B(). /*@target=B::w*/ w;
+    ^
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on.dart.type_promotion.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on.dart.type_promotion.expect
new file mode 100644
index 0000000..f71d77a
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on.dart.type_promotion.expect
@@ -0,0 +1,6 @@
+pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on.dart:14:5: Context: Write to t@389
+  t = x;
+    ^
+pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on.dart:15:5: Context: Write to t@389
+  t = y;
+    ^
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2.dart.type_promotion.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2.dart.type_promotion.expect
new file mode 100644
index 0000000..5b8cb3d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2.dart.type_promotion.expect
@@ -0,0 +1,6 @@
+pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2.dart:16:5: Context: Write to t@400
+  t = A.x;
+    ^
+pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2.dart:17:5: Context: Write to t@400
+  t = B.y;
+    ^
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively.dart.type_promotion.expect b/pkg/front_end/testcases/inference/infer_statics_transitively.dart.type_promotion.expect
new file mode 100644
index 0000000..2bf9cee
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively.dart.type_promotion.expect
@@ -0,0 +1,3 @@
+pkg/front_end/testcases/inference/infer_statics_transitively.dart:15:5: Context: Write to i@388
+  i = m1;
+    ^
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively2.dart.type_promotion.expect b/pkg/front_end/testcases/inference/infer_statics_transitively2.dart.type_promotion.expect
new file mode 100644
index 0000000..bd3b23fe
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively2.dart.type_promotion.expect
@@ -0,0 +1,6 @@
+pkg/front_end/testcases/inference/infer_statics_transitively2.dart:15:5: Context: Write to i@403
+  i = y1;
+    ^
+pkg/front_end/testcases/inference/infer_statics_transitively2.dart:16:5: Context: Write to i@403
+  i = y2;
+    ^
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively3.dart.type_promotion.expect b/pkg/front_end/testcases/inference/infer_statics_transitively3.dart.type_promotion.expect
new file mode 100644
index 0000000..2d28253
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively3.dart.type_promotion.expect
@@ -0,0 +1,12 @@
+pkg/front_end/testcases/inference/infer_statics_transitively3.dart:20:5: Context: Write to i@602
+  i = t1;
+    ^
+pkg/front_end/testcases/inference/infer_statics_transitively3.dart:21:5: Context: Write to i@602
+  i = t2;
+    ^
+pkg/front_end/testcases/inference/infer_statics_transitively3.dart:22:5: Context: Write to i@602
+  i = t3;
+    ^
+pkg/front_end/testcases/inference/infer_statics_transitively3.dart:23:5: Context: Write to i@602
+  i = t4;
+    ^
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var.dart.type_promotion.expect b/pkg/front_end/testcases/inference/infer_type_on_var.dart.type_promotion.expect
new file mode 100644
index 0000000..f8cd812
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_type_on_var.dart.type_promotion.expect
@@ -0,0 +1,3 @@
+pkg/front_end/testcases/inference/infer_type_on_var.dart:10:5: Context: Write to x@278
+  x = /*error:INVALID_ASSIGNMENT*/ "hi";
+    ^
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var2.dart.type_promotion.expect b/pkg/front_end/testcases/inference/infer_type_on_var2.dart.type_promotion.expect
new file mode 100644
index 0000000..23f8fc0
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_type_on_var2.dart.type_promotion.expect
@@ -0,0 +1,3 @@
+pkg/front_end/testcases/inference/infer_type_on_var2.dart:10:5: Context: Write to x@292
+  x = /*error:INVALID_ASSIGNMENT*/ "hi";
+    ^
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.type_promotion.expect b/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.type_promotion.expect
new file mode 100644
index 0000000..e745ffe
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.type_promotion.expect
@@ -0,0 +1,18 @@
+pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:13:7: Context: Write to a@341
+    a = /*error:INVALID_ASSIGNMENT*/ "hi";
+      ^
+pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:14:7: Context: Write to a@341
+    a = 3;
+      ^
+pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:16:7: Context: Write to b@441
+    b = /*error:INVALID_ASSIGNMENT*/ "hi";
+      ^
+pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:17:7: Context: Write to b@441
+    b = 4;
+      ^
+pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:19:7: Context: Write to c@541
+    c = /*error:INVALID_ASSIGNMENT*/ "hi";
+      ^
+pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:20:7: Context: Write to c@541
+    c = 4;
+      ^
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.type_promotion.expect b/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.type_promotion.expect
new file mode 100644
index 0000000..771ee3c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.type_promotion.expect
@@ -0,0 +1,18 @@
+pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:12:5: Context: Write to a@304
+  a = /*error:INVALID_ASSIGNMENT*/ "hi";
+    ^
+pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:13:5: Context: Write to a@304
+  a = 3;
+    ^
+pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:15:5: Context: Write to b@381
+  b = /*error:INVALID_ASSIGNMENT*/ "hi";
+    ^
+pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:16:5: Context: Write to b@381
+  b = 4;
+    ^
+pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:18:5: Context: Write to c@458
+  c = /*error:INVALID_ASSIGNMENT*/ "hi";
+    ^
+pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:19:5: Context: Write to c@458
+  c = 4;
+    ^
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_loop_with_inference.dart.type_promotion.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_loop_with_inference.dart.type_promotion.expect
new file mode 100644
index 0000000..ab77237
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_loop_with_inference.dart.type_promotion.expect
@@ -0,0 +1,3 @@
+pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_loop_with_inference.dart:9:61: Context: Write to i@296
+  for (var /*@type=int*/ i = 0; i /*@target=num::<*/ < 10; i++) {
+                                                            ^^
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff.dart.type_promotion.expect b/pkg/front_end/testcases/inference/instantiate_tearoff.dart.type_promotion.expect
new file mode 100644
index 0000000..b81ec02
--- /dev/null
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff.dart.type_promotion.expect
@@ -0,0 +1,15 @@
+pkg/front_end/testcases/inference/instantiate_tearoff.dart:18:10: Context: Write to func@399
+    func = super. /*@target=C::f*/ f;
+         ^
+pkg/front_end/testcases/inference/instantiate_tearoff.dart:25:8: Context: Write to func@504
+  func = f;
+       ^
+pkg/front_end/testcases/inference/instantiate_tearoff.dart:26:8: Context: Write to func@504
+  func = new C(). /*@target=C::f*/ f;
+       ^
+pkg/front_end/testcases/inference/instantiate_tearoff.dart:27:8: Context: Write to func@504
+  func = C.g;
+       ^
+pkg/front_end/testcases/inference/instantiate_tearoff.dart:28:8: Context: Write to func@504
+  func = h;
+       ^
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart.type_promotion.expect b/pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart.type_promotion.expect
new file mode 100644
index 0000000..b654339
--- /dev/null
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart.type_promotion.expect
@@ -0,0 +1,3 @@
+pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart:10:8: Context: Write to func@314
+  func = f.call;
+       ^
diff --git a/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart.type_promotion.expect b/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart.type_promotion.expect
new file mode 100644
index 0000000..10fcaec
--- /dev/null
+++ b/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart.type_promotion.expect
@@ -0,0 +1,3 @@
+pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart:19:10: Context: Write to list@521
+    list = <String>[];
+         ^
diff --git a/pkg/front_end/testcases/inference/logical_or_promotion.dart.type_promotion.expect b/pkg/front_end/testcases/inference/logical_or_promotion.dart.type_promotion.expect
new file mode 100644
index 0000000..88430c6
--- /dev/null
+++ b/pkg/front_end/testcases/inference/logical_or_promotion.dart.type_promotion.expect
@@ -0,0 +1,9 @@
+pkg/front_end/testcases/inference/logical_or_promotion.dart:16:11: Context: Possible promotion of o@338
+    if (o is A || o is B) {
+          ^^
+pkg/front_end/testcases/inference/logical_or_promotion.dart:16:21: Context: Possible promotion of o@338
+    if (o is A || o is B) {
+                    ^^
+pkg/front_end/testcases/inference/logical_or_promotion.dart:17:13: Context: Possible promotion of o@338
+      if (o is A) {
+            ^^
diff --git a/pkg/front_end/testcases/inference/no_error_when_declared_type_is_num_and_assigned_null.dart.type_promotion.expect b/pkg/front_end/testcases/inference/no_error_when_declared_type_is_num_and_assigned_null.dart.type_promotion.expect
new file mode 100644
index 0000000..d405d4e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/no_error_when_declared_type_is_num_and_assigned_null.dart.type_promotion.expect
@@ -0,0 +1,3 @@
+pkg/front_end/testcases/inference/no_error_when_declared_type_is_num_and_assigned_null.dart:10:5: Context: Write to x@278
+  x = null;
+    ^
diff --git a/pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom.dart.type_promotion.expect b/pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom.dart.type_promotion.expect
new file mode 100644
index 0000000..1eed720
--- /dev/null
+++ b/pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom.dart.type_promotion.expect
@@ -0,0 +1,6 @@
+pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom.dart:15:5: Context: Write to f@369
+  f = /*@returnType=Null*/ (/*@type=Object*/ x) => 'hello';
+    ^
+pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom.dart:18:5: Context: Write to g@542
+  g = 'hello';
+    ^
diff --git a/pkg/front_end/testcases/inference/promote_bounds.dart.type_promotion.expect b/pkg/front_end/testcases/inference/promote_bounds.dart.type_promotion.expect
new file mode 100644
index 0000000..90d61ac
--- /dev/null
+++ b/pkg/front_end/testcases/inference/promote_bounds.dart.type_promotion.expect
@@ -0,0 +1,6 @@
+pkg/front_end/testcases/inference/promote_bounds.dart:17:9: Context: Possible promotion of a@366
+  if (a is String) {
+        ^^
+pkg/front_end/testcases/inference/promote_bounds.dart:21:9: Context: Possible promotion of a@366
+  if (a is C) {
+        ^^
diff --git a/pkg/front_end/testcases/inference/promote_from_logical_rhs.dart.type_promotion.expect b/pkg/front_end/testcases/inference/promote_from_logical_rhs.dart.type_promotion.expect
new file mode 100644
index 0000000..dafde1f
--- /dev/null
+++ b/pkg/front_end/testcases/inference/promote_from_logical_rhs.dart.type_promotion.expect
@@ -0,0 +1,3 @@
+pkg/front_end/testcases/inference/promote_from_logical_rhs.dart:9:14: Context: Possible promotion of a@279
+  if (b && a is int) {
+             ^^
diff --git a/pkg/front_end/testcases/inference/promotion_subtype_check.dart.type_promotion.expect b/pkg/front_end/testcases/inference/promotion_subtype_check.dart.type_promotion.expect
new file mode 100644
index 0000000..93c14dd
--- /dev/null
+++ b/pkg/front_end/testcases/inference/promotion_subtype_check.dart.type_promotion.expect
@@ -0,0 +1,9 @@
+pkg/front_end/testcases/inference/promotion_subtype_check.dart:9:9: Context: Possible promotion of x@276
+  if (x is int) {
+        ^^
+pkg/front_end/testcases/inference/promotion_subtype_check.dart:10:33: Context: Possible promotion of x@276
+    if (/*@promotedType=int*/ x is String) {
+                                ^^
+pkg/front_end/testcases/inference/promotion_subtype_check.dart:18:9: Context: Possible promotion of x@276
+  if (x is String) {
+        ^^
diff --git a/pkg/front_end/testcases/inference/try_catch_promotion.dart.type_promotion.expect b/pkg/front_end/testcases/inference/try_catch_promotion.dart.type_promotion.expect
new file mode 100644
index 0000000..d34e2ca
--- /dev/null
+++ b/pkg/front_end/testcases/inference/try_catch_promotion.dart.type_promotion.expect
@@ -0,0 +1,6 @@
+pkg/front_end/testcases/inference/try_catch_promotion.dart:20:11: Context: Possible promotion of x@382
+    if (x is D) {
+          ^^
+pkg/front_end/testcases/inference/try_catch_promotion.dart:23:11: Context: Possible promotion of y@385
+    if (y is E) {
+          ^^
diff --git a/pkg/front_end/testcases/inference/type_promotion_simple.dart.type_promotion.expect b/pkg/front_end/testcases/inference/type_promotion_simple.dart.type_promotion.expect
new file mode 100644
index 0000000..364cd86
--- /dev/null
+++ b/pkg/front_end/testcases/inference/type_promotion_simple.dart.type_promotion.expect
@@ -0,0 +1,3 @@
+pkg/front_end/testcases/inference/type_promotion_simple.dart:10:9: Context: Possible promotion of n@279
+  if (n is int) {
+        ^^
diff --git a/pkg/front_end/testcases/inference/type_promotion_stopped_by_access_in_a_closure.dart.type_promotion.expect b/pkg/front_end/testcases/inference/type_promotion_stopped_by_access_in_a_closure.dart.type_promotion.expect
new file mode 100644
index 0000000..d1dd6f5
--- /dev/null
+++ b/pkg/front_end/testcases/inference/type_promotion_stopped_by_access_in_a_closure.dart.type_promotion.expect
@@ -0,0 +1,6 @@
+pkg/front_end/testcases/inference/type_promotion_stopped_by_access_in_a_closure.dart:10:9: Context: Possible promotion of n@279
+  if (n is int) {
+        ^^
+pkg/front_end/testcases/inference/type_promotion_stopped_by_access_in_a_closure.dart:16:5: Context: Write to n@279
+  n = null;
+    ^
diff --git a/pkg/front_end/testcases/inference/type_promotion_stopped_by_assignment_in_scope.dart.type_promotion.expect b/pkg/front_end/testcases/inference/type_promotion_stopped_by_assignment_in_scope.dart.type_promotion.expect
new file mode 100644
index 0000000..3a7414e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/type_promotion_stopped_by_assignment_in_scope.dart.type_promotion.expect
@@ -0,0 +1,6 @@
+pkg/front_end/testcases/inference/type_promotion_stopped_by_assignment_in_scope.dart:10:9: Context: Possible promotion of n@279
+  if (n is int) {
+        ^^
+pkg/front_end/testcases/inference/type_promotion_stopped_by_assignment_in_scope.dart:12:7: Context: Write to n@279
+    n = null;
+      ^
diff --git a/pkg/front_end/testcases/inference/type_promotion_stopped_by_mutation_in_a_closure.dart.type_promotion.expect b/pkg/front_end/testcases/inference/type_promotion_stopped_by_mutation_in_a_closure.dart.type_promotion.expect
new file mode 100644
index 0000000..c5a50d4
--- /dev/null
+++ b/pkg/front_end/testcases/inference/type_promotion_stopped_by_mutation_in_a_closure.dart.type_promotion.expect
@@ -0,0 +1,6 @@
+pkg/front_end/testcases/inference/type_promotion_stopped_by_mutation_in_a_closure.dart:10:9: Context: Possible promotion of n@279
+  if (n is int) {
+        ^^
+pkg/front_end/testcases/inference/type_promotion_stopped_by_mutation_in_a_closure.dart:14:7: Context: Write to n@279
+    n = null;
+      ^
diff --git a/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.type_promotion.expect b/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.type_promotion.expect
new file mode 100644
index 0000000..96232fc
--- /dev/null
+++ b/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.type_promotion.expect
@@ -0,0 +1,12 @@
+pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart:29:5: Context: Write to x@559
+  x = 123;
+    ^
+pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart:30:5: Context: Write to x@559
+  x = 'hi';
+    ^
+pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart:31:5: Context: Write to y@612
+  y = /*error:INVALID_ASSIGNMENT*/ 123;
+    ^
+pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart:32:5: Context: Write to y@612
+  y = /*error:INVALID_ASSIGNMENT*/ 'hi';
+    ^
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_local.dart.type_promotion.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_local.dart.type_promotion.expect
new file mode 100644
index 0000000..ca45342
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_local.dart.type_promotion.expect
@@ -0,0 +1,42 @@
+pkg/front_end/testcases/inference_new/infer_assign_to_local.dart:23:9: Context: Write to local@474
+  local = /*@typeArgs=B*/ f();
+        ^
+pkg/front_end/testcases/inference_new/infer_assign_to_local.dart:24:9: Context: Write to local@474
+  local ??= /*@typeArgs=B*/ f();
+        ^^^
+pkg/front_end/testcases/inference_new/infer_assign_to_local.dart:25:9: Context: Write to local@474
+  local += /*@typeArgs=dynamic*/ f();
+        ^^
+pkg/front_end/testcases/inference_new/infer_assign_to_local.dart:26:9: Context: Write to local@474
+  local *= /*@typeArgs=dynamic*/ f();
+        ^^
+pkg/front_end/testcases/inference_new/infer_assign_to_local.dart:27:9: Context: Write to local@474
+  local &= /*@typeArgs=dynamic*/ f();
+        ^^
+pkg/front_end/testcases/inference_new/infer_assign_to_local.dart:28:3: Context: Write to local@474
+  --local;
+  ^^
+pkg/front_end/testcases/inference_new/infer_assign_to_local.dart:29:8: Context: Write to local@474
+  local--;
+       ^^
+pkg/front_end/testcases/inference_new/infer_assign_to_local.dart:30:30: Context: Write to local@474
+  var /*@type=B*/ v1 = local = /*@typeArgs=B*/ f();
+                             ^
+pkg/front_end/testcases/inference_new/infer_assign_to_local.dart:31:30: Context: Write to local@474
+  var /*@type=B*/ v2 = local ??= /*@typeArgs=B*/ f();
+                             ^^^
+pkg/front_end/testcases/inference_new/infer_assign_to_local.dart:32:30: Context: Write to local@474
+  var /*@type=A*/ v3 = local += /*@typeArgs=dynamic*/ f();
+                             ^^
+pkg/front_end/testcases/inference_new/infer_assign_to_local.dart:33:30: Context: Write to local@474
+  var /*@type=B*/ v4 = local *= /*@typeArgs=dynamic*/ f();
+                             ^^
+pkg/front_end/testcases/inference_new/infer_assign_to_local.dart:34:30: Context: Write to local@474
+  var /*@type=C*/ v5 = local &= /*@typeArgs=dynamic*/ f();
+                             ^^
+pkg/front_end/testcases/inference_new/infer_assign_to_local.dart:35:24: Context: Write to local@474
+  var /*@type=B*/ v6 = --local;
+                       ^^
+pkg/front_end/testcases/inference_new/infer_assign_to_local.dart:36:29: Context: Write to local@474
+  var /*@type=B*/ v7 = local--;
+                            ^^
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards.dart.type_promotion.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards.dart.type_promotion.expect
new file mode 100644
index 0000000..b6c751d
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards.dart.type_promotion.expect
@@ -0,0 +1,84 @@
+pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards.dart:13:28: Context: Write to t@343
+  var /*@type=int*/ v1 = t = getInt();
+                           ^
+pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards.dart:14:28: Context: Write to t@343
+  var /*@type=num*/ v2 = t = getNum();
+                           ^
+pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards.dart:15:28: Context: Write to t@343
+  var /*@type=int*/ v4 = t ??= getInt();
+                           ^^^
+pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards.dart:16:28: Context: Write to t@343
+  var /*@type=num*/ v5 = t ??= getNum();
+                           ^^^
+pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards.dart:17:28: Context: Write to t@343
+  var /*@type=int*/ v7 = t += getInt();
+                           ^^
+pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards.dart:18:28: Context: Write to t@343
+  var /*@type=num*/ v8 = t += getNum();
+                           ^^
+pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards.dart:19:27: Context: Write to t@343
+  var /*@type=int*/ v10 = ++t;
+                          ^^
+pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards.dart:20:28: Context: Write to t@343
+  var /*@type=int*/ v11 = t++;
+                           ^^
+pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards.dart:24:28: Context: Write to t@343
+  var /*@type=int*/ v1 = t = getInt();
+                           ^
+pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards.dart:25:28: Context: Write to t@343
+  var /*@type=num*/ v2 = t = getNum();
+                           ^
+pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards.dart:26:31: Context: Write to t@343
+  var /*@type=double*/ v3 = t = getDouble();
+                              ^
+pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards.dart:27:28: Context: Write to t@343
+  var /*@type=num*/ v4 = t ??= getInt();
+                           ^^^
+pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards.dart:28:28: Context: Write to t@343
+  var /*@type=num*/ v5 = t ??= getNum();
+                           ^^^
+pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards.dart:29:28: Context: Write to t@343
+  var /*@type=num*/ v6 = t ??= getDouble();
+                           ^^^
+pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards.dart:30:28: Context: Write to t@343
+  var /*@type=num*/ v7 = t += getInt();
+                           ^^
+pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards.dart:31:28: Context: Write to t@343
+  var /*@type=num*/ v8 = t += getNum();
+                           ^^
+pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards.dart:32:28: Context: Write to t@343
+  var /*@type=num*/ v9 = t += getDouble();
+                           ^^
+pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards.dart:33:27: Context: Write to t@343
+  var /*@type=num*/ v10 = ++t;
+                          ^^
+pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards.dart:34:28: Context: Write to t@343
+  var /*@type=num*/ v11 = t++;
+                           ^^
+pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards.dart:38:28: Context: Write to t@343
+  var /*@type=num*/ v2 = t = getNum();
+                           ^
+pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards.dart:39:31: Context: Write to t@343
+  var /*@type=double*/ v3 = t = getDouble();
+                              ^
+pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards.dart:40:28: Context: Write to t@343
+  var /*@type=num*/ v5 = t ??= getNum();
+                           ^^^
+pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards.dart:41:31: Context: Write to t@343
+  var /*@type=double*/ v6 = t ??= getDouble();
+                              ^^^
+pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards.dart:42:31: Context: Write to t@343
+  var /*@type=double*/ v7 = t += getInt();
+                              ^^
+pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards.dart:43:31: Context: Write to t@343
+  var /*@type=double*/ v8 = t += getNum();
+                              ^^
+pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards.dart:44:31: Context: Write to t@343
+  var /*@type=double*/ v9 = t += getDouble();
+                              ^^
+pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards.dart:45:30: Context: Write to t@343
+  var /*@type=double*/ v10 = ++t;
+                             ^^
+pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards.dart:46:31: Context: Write to t@343
+  var /*@type=double*/ v11 = t++;
+                              ^^
diff --git a/pkg/front_end/testcases/invalid_assignment.dart.type_promotion.expect b/pkg/front_end/testcases/invalid_assignment.dart.type_promotion.expect
new file mode 100644
index 0000000..abff5c0e
--- /dev/null
+++ b/pkg/front_end/testcases/invalid_assignment.dart.type_promotion.expect
@@ -0,0 +1,18 @@
+pkg/front_end/testcases/invalid_assignment.dart:12:5: Context: Write to i@300
+  i = 1;
+    ^
+pkg/front_end/testcases/invalid_assignment.dart:13:5: Context: Write to i@300
+  i = /*@error=InvalidAssignment*/ s;
+    ^
+pkg/front_end/testcases/invalid_assignment.dart:14:5: Context: Write to i@300
+  i ??= 1;
+    ^^^
+pkg/front_end/testcases/invalid_assignment.dart:15:5: Context: Write to i@300
+  i ??= /*@error=InvalidAssignment*/ s;
+    ^^^
+pkg/front_end/testcases/invalid_assignment.dart:16:5: Context: Write to a@315
+  a = new A();
+    ^
+pkg/front_end/testcases/invalid_assignment.dart:17:34: Context: Write to a@315
+  a /*@error=InvalidAssignment*/ += 1;
+                                 ^^
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.type_promotion.expect b/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.type_promotion.expect
new file mode 100644
index 0000000..8dc5a4c
--- /dev/null
+++ b/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.type_promotion.expect
@@ -0,0 +1,6 @@
+pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart:34:14: Context: Write to value@1053
+  if ((value = b.foo()) != "baz") {
+             ^
+pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart:37:14: Context: Write to value@1053
+  if ((value = b.hest()) != 42) {
+             ^
diff --git a/pkg/front_end/testcases/rasta/for_loop.dart.type_promotion.expect b/pkg/front_end/testcases/rasta/for_loop.dart.type_promotion.expect
new file mode 100644
index 0000000..2beae6f
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/for_loop.dart.type_promotion.expect
@@ -0,0 +1,12 @@
+pkg/front_end/testcases/rasta/for_loop.dart:7:29: Context: Write to i@292
+  for (int i = 0; i < 100; i++) {
+                            ^^
+pkg/front_end/testcases/rasta/for_loop.dart:8:12: Context: Write to i@292
+    print(i++);
+           ^^
+pkg/front_end/testcases/rasta/for_loop.dart:10:53: Context: Write to i@292
+  for (int i = 0; i < 100; c < 42 ? throw "fisk" : i++) {
+                                                    ^^
+pkg/front_end/testcases/rasta/for_loop.dart:11:12: Context: Write to i@292
+    print(i++);
+           ^^
diff --git a/pkg/front_end/testcases/rasta/issue_000004.dart.type_promotion.expect b/pkg/front_end/testcases/rasta/issue_000004.dart.type_promotion.expect
new file mode 100644
index 0000000..4904aab
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/issue_000004.dart.type_promotion.expect
@@ -0,0 +1,9 @@
+pkg/front_end/testcases/rasta/issue_000004.dart:10:7: Context: Write to f@273
+    f *= n;
+      ^^
+pkg/front_end/testcases/rasta/issue_000004.dart:18:7: Context: Write to f@359
+    f *= n;
+      ^^
+pkg/front_end/testcases/rasta/issue_000004.dart:27:7: Context: Write to f@459
+    f *= global;
+      ^^
diff --git a/pkg/front_end/testcases/rasta/issue_000069.dart.type_promotion.expect b/pkg/front_end/testcases/rasta/issue_000069.dart.type_promotion.expect
new file mode 100644
index 0000000..f2b5d7c
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/issue_000069.dart.type_promotion.expect
@@ -0,0 +1,3 @@
+pkg/front_end/testcases/rasta/issue_000069.dart:7:11: Context: Write to i@237
+  while (i++ < 5) var x = i;
+          ^^
diff --git a/pkg/front_end/testcases/rasta/issue_000070.dart.type_promotion.expect b/pkg/front_end/testcases/rasta/issue_000070.dart.type_promotion.expect
new file mode 100644
index 0000000..27f599e
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/issue_000070.dart.type_promotion.expect
@@ -0,0 +1,9 @@
+pkg/front_end/testcases/rasta/issue_000070.dart:11:21: Context: Possible promotion of n@306
+    Expect.isTrue(n is N);
+                    ^^
+pkg/front_end/testcases/rasta/issue_000070.dart:12:21: Context: Possible promotion of s@311
+    Expect.isTrue(s is S);
+                    ^^
+pkg/front_end/testcases/rasta/issue_000070.dart:18:21: Context: Possible promotion of s@311
+    Expect.isTrue(s is S);
+                    ^^
diff --git a/pkg/front_end/testcases/rasta/super_operator.dart.type_promotion.expect b/pkg/front_end/testcases/rasta/super_operator.dart.type_promotion.expect
new file mode 100644
index 0000000..a1bf30c
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/super_operator.dart.type_promotion.expect
@@ -0,0 +1,3 @@
+pkg/front_end/testcases/rasta/super_operator.dart:18:34: Context: Write to i@401
+  operator []=(i, val) => super[i++] += val;
+                                 ^^
diff --git a/pkg/front_end/testcases/rasta/switch_execution_case_t02.dart.type_promotion.expect b/pkg/front_end/testcases/rasta/switch_execution_case_t02.dart.type_promotion.expect
new file mode 100644
index 0000000..4aebb51
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/switch_execution_case_t02.dart.type_promotion.expect
@@ -0,0 +1,18 @@
+pkg/front_end/testcases/rasta/switch_execution_case_t02.dart:33:21: Context: Write to result@1329
+    case 1:  result = 1;
+                    ^
+pkg/front_end/testcases/rasta/switch_execution_case_t02.dart:35:21: Context: Write to result@1329
+    case 2:  result = 2; /// static warning - case fall-through, see "Switch"
+                    ^
+pkg/front_end/testcases/rasta/switch_execution_case_t02.dart:36:21: Context: Write to result@1329
+    case 3:  result = 3; /// static warning - case fall-through, see "Switch"
+                    ^
+pkg/front_end/testcases/rasta/switch_execution_case_t02.dart:37:21: Context: Write to result@1329
+    default: result = 4;
+                    ^
+pkg/front_end/testcases/rasta/switch_execution_case_t02.dart:47:20: Context: Write to result@1636
+    case 2: result = 1; /// static warning - case fall-through, see "Switch"
+                   ^
+pkg/front_end/testcases/rasta/switch_execution_case_t02.dart:49:20: Context: Write to result@1636
+    case 4: result = 2;
+                   ^
diff --git a/pkg/front_end/testcases/regress/issue_31184.dart.type_promotion.expect b/pkg/front_end/testcases/regress/issue_31184.dart.type_promotion.expect
new file mode 100644
index 0000000..9514d8e
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_31184.dart.type_promotion.expect
@@ -0,0 +1,3 @@
+pkg/front_end/testcases/regress/issue_31184.dart:6:28: Context: Write to i@243
+  for (int i = 0, i > 10; i++) {}
+                           ^^
diff --git a/pkg/front_end/testcases/regress/issue_33452.dart.type_promotion.expect b/pkg/front_end/testcases/regress/issue_33452.dart.type_promotion.expect
new file mode 100644
index 0000000..64406e2
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_33452.dart.type_promotion.expect
@@ -0,0 +1,15 @@
+pkg/front_end/testcases/regress/issue_33452.dart:11:5: Context: Write to x@296
+  x = new ExistingClass();
+    ^
+pkg/front_end/testcases/regress/issue_33452.dart:12:5: Context: Write to x@296
+  x = new ExistingClass<String>();
+    ^
+pkg/front_end/testcases/regress/issue_33452.dart:13:5: Context: Write to x@296
+  x = new ExistingClass<String>.nonExistingConstructor();
+    ^
+pkg/front_end/testcases/regress/issue_33452.dart:14:5: Context: Write to x@296
+  x = new ExistingClass<String, String>.nonExistingConstructor();
+    ^
+pkg/front_end/testcases/regress/issue_33452.dart:15:5: Context: Write to x@296
+  x = new NonExistingClass();
+    ^
diff --git a/pkg/front_end/testcases/regress/issue_33672.dart.type_promotion.expect b/pkg/front_end/testcases/regress/issue_33672.dart.type_promotion.expect
new file mode 100644
index 0000000..929bc26
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_33672.dart.type_promotion.expect
@@ -0,0 +1,12 @@
+pkg/front_end/testcases/regress/issue_33672.dart:7:34: Context: Write to a@260
+  yield: for (int a = 0; a < 10; ++a) {
+                                 ^^
+pkg/front_end/testcases/regress/issue_33672.dart:8:29: Context: Write to b@295
+    for (int b = 0; b < 10; ++b) {
+                            ^^
+pkg/front_end/testcases/regress/issue_33672.dart:9:7: Context: Write to count@231
+      ++count;
+      ^^
+pkg/front_end/testcases/regress/issue_33672.dart:12:5: Context: Write to count@231
+    ++count;
+    ^^
diff --git a/pkg/front_end/testcases/runtime_checks/implicit_downcast_for_condition.dart.type_promotion.expect b/pkg/front_end/testcases/runtime_checks/implicit_downcast_for_condition.dart.type_promotion.expect
new file mode 100644
index 0000000..77d54c8
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks/implicit_downcast_for_condition.dart.type_promotion.expect
@@ -0,0 +1,3 @@
+pkg/front_end/testcases/runtime_checks/implicit_downcast_for_condition.dart:11:25: Context: Write to i@310
+    for (int i = 0; o; i++) {}
+                        ^^
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.type_promotion.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.type_promotion.expect
new file mode 100644
index 0000000..d9c1892
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.type_promotion.expect
@@ -0,0 +1,6 @@
+pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart:22:44: Context: Write to b@535
+  b /*@checkReturn=B<num, (num) -> void>*/ += 1;
+                                           ^^
+pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart:23:52: Context: Write to b@535
+  var x = b /*@checkReturn=B<num, (num) -> void>*/ += 2;
+                                                   ^^
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.type_promotion.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.type_promotion.expect
new file mode 100644
index 0000000..52a0161
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.type_promotion.expect
@@ -0,0 +1,3 @@
+pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:51:5: Context: Write to d@1119
+  d = new D(new C(numToNum));
+    ^
diff --git a/pkg/front_end/testcases/statements.dart.type_promotion.expect b/pkg/front_end/testcases/statements.dart.type_promotion.expect
new file mode 100644
index 0000000..f1b6150
--- /dev/null
+++ b/pkg/front_end/testcases/statements.dart.type_promotion.expect
@@ -0,0 +1,12 @@
+pkg/front_end/testcases/statements.dart:50:10: Context: Write to done@988
+    done = true;
+         ^
+pkg/front_end/testcases/statements.dart:95:9: Context: Write to i@1814
+    if (++i < 3) continue;
+        ^^
+pkg/front_end/testcases/statements.dart:98:5: Context: Write to i@1814
+  i = 0;
+    ^
+pkg/front_end/testcases/statements.dart:101:9: Context: Write to i@1814
+    if (++i < 3) continue OUTER;
+        ^^