[flow analysis] Fix layering of type promotions in try/finally.

A tricky part of the implementation of flow analysis is the handling
of try/finally statements. Although promotions are tracked separately
in the `try` and `finally` blocks, promotions from both blocks need to
be merged together at the conclusion of the finally block. This
creates an ambiguity, because each type in a promotion chain is
required to be a subtype of the previous, and hence multiple
promotions of the same variable are inherently ordered. The ambiguity
is: when the promotions from the `try` and `finally` block are merged,
which promotions should be applied first?

In discussion with the language team, we've decided that the
promotions from the `try` block should be applied first, because that
matches the order of code execution. This change makes the behavior of
flow analysis more uniform, which should make it easier to reason
about and maintain.

In practice, the difference in behavior is quite subtle, and I don't
expect users to notice. However, to be on the safe side, the change in
behavior is conditioned on the `sound-flow-analysis` flag, so it will
only take effect when the user deliberately upgrades to language
version 3.9, and it will not affect already-published packages.

A test in google3 showed that no internal code would be broken by
force-enabling this change.

Fixes https://github.com/dart-lang/language/issues/4382.

Change-Id: I0e9f6db808a964e0b4325d3020654a9f2be273a2
Bug: https://github.com/dart-lang/language/issues/4382
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/432001
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>

https://dart.googlesource.com/sdk/+/9f0e5229fa1cf0769da9d84896670a2e93e229ce
diff --git a/DEPS b/DEPS
index f41297e..03afe36 100644
--- a/DEPS
+++ b/DEPS
@@ -235,7 +235,7 @@
 ]
 
 deps = {
-  'flutter/engine/src/flutter/third_party/dart': Var('dart_git') + '/sdk' + '@' + '5f9c5da23871fe4a232b80c91f021104755e70e0',
+  'flutter/engine/src/flutter/third_party/dart': Var('dart_git') + '/sdk' + '@' + '9f0e5229fa1cf0769da9d84896670a2e93e229ce',
 
   'flutter': Var('flutter_git') + '/mirrors/flutter' + '@' + '406199ca71f44f403162e4f37fff6ba14f701f31',
 
diff --git a/commits.json b/commits.json
index d156884..e84335a 100644
--- a/commits.json
+++ b/commits.json
@@ -1,4 +1,4 @@
 {
   "flutter":"406199ca71f44f403162e4f37fff6ba14f701f31",
-  "flutter/engine/src/flutter/third_party/dart":"5f9c5da23871fe4a232b80c91f021104755e70e0"
+  "flutter/engine/src/flutter/third_party/dart":"9f0e5229fa1cf0769da9d84896670a2e93e229ce"
 }
\ No newline at end of file