Version 2.14.0-70.0.dev

Merge commit 'cb636850dffc9484a978229a11d80d84eabe1aa4' into 'dev'
diff --git a/runtime/vm/compiler/backend/flow_graph.cc b/runtime/vm/compiler/backend/flow_graph.cc
index ead29a0..2d890b4 100644
--- a/runtime/vm/compiler/backend/flow_graph.cc
+++ b/runtime/vm/compiler/backend/flow_graph.cc
@@ -1613,6 +1613,10 @@
     return;
   }
 
+  // Current_context_var is never pruned, it is artificially kept alive, so
+  // it should not be checked here.
+  const intptr_t current_context_var_index = CurrentContextEnvIndex();
+
   for (intptr_t i = 0, n = preorder().length(); i < n; ++i) {
     BlockEntryInstr* block_entry = preorder()[i];
     Instruction* last_instruction = block_entry->last_instruction();
@@ -1624,7 +1628,7 @@
       if (successor->phis() != NULL) {
         for (intptr_t j = 0; j < successor->phis()->length(); ++j) {
           PhiInstr* phi = (*successor->phis())[j];
-          if (phi == nullptr) {
+          if (phi == nullptr && j != current_context_var_index) {
             // We have no phi node for the this variable.
             // Double check we do not have a different value in our env.
             // If we do, we would have needed a phi-node in the successsor.
diff --git a/runtime/vm/compiler/backend/flow_graph.h b/runtime/vm/compiler/backend/flow_graph.h
index dbbd124..4e72259 100644
--- a/runtime/vm/compiler/backend/flow_graph.h
+++ b/runtime/vm/compiler/backend/flow_graph.h
@@ -651,8 +651,8 @@
   const GrowableArray<BlockEntryInstr*>& postorder_;
 
   // Live-out sets for each block.  They contain indices of variables
-  // that are live out from this block: that is values that were either
-  // defined in this block or live into it and that are used in some
+  // that are live out from this block. That is values that were (1) either
+  // defined in this block or live into it, and (2) that are used in some
   // successor block.
   GrowableArray<BitVector*> live_out_;
 
diff --git a/tests/language/vm/regress_45855_test.dart b/tests/language/vm/regress_45855_test.dart
new file mode 100644
index 0000000..14200e4
--- /dev/null
+++ b/tests/language/vm/regress_45855_test.dart
@@ -0,0 +1,34 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+//
+// VMOptions=--optimization-counter-threshold=100 --deterministic
+//
+// The Dart Project Fuzz Tester (1.89).
+// Program generated as:
+//   dart dartfuzz.dart --seed 928581289 --no-fp --ffi --no-flat
+//
+// Minimized.
+
+@pragma('vm:never-inline')
+void main2(bool? boolParam) {
+  for (int i = 0; i < 200; i++) {
+    final bool1 = boolParam ?? false;
+    if (bool1) {
+      () {
+        // Force creating a new current context.
+        i.toString();
+      };
+      // Force having multiple paths to the exit, popping the current context.
+      break;
+    }
+  }
+}
+
+void main() {
+  // Test OSR.
+  main2(null);
+
+  // Test non-OSR.
+  main2(null);
+}
diff --git a/tests/language_2/vm/regress_45855_test.dart b/tests/language_2/vm/regress_45855_test.dart
new file mode 100644
index 0000000..b99676e
--- /dev/null
+++ b/tests/language_2/vm/regress_45855_test.dart
@@ -0,0 +1,34 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+//
+// VMOptions=--optimization-counter-threshold=100 --deterministic
+//
+// The Dart Project Fuzz Tester (1.89).
+// Program generated as:
+//   dart dartfuzz.dart --seed 928581289 --no-fp --ffi --no-flat
+//
+// Minimized.
+
+@pragma('vm:never-inline')
+void main2(bool boolParam) {
+  for (int i = 0; i < 200; i++) {
+    final bool1 = boolParam ?? false;
+    if (bool1) {
+      () {
+        // Force creating a new current context.
+        i.toString();
+      };
+      // Force having multiple paths to the exit, popping the current context.
+      break;
+    }
+  }
+}
+
+void main() {
+  // Test OSR.
+  main2(null);
+
+  // Test non-OSR.
+  main2(null);
+}
diff --git a/tools/VERSION b/tools/VERSION
index 134fd10..43fcd00 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 14
 PATCH 0
-PRERELEASE 69
+PRERELEASE 70
 PRERELEASE_PATCH 0
\ No newline at end of file