9f9abe5fcd
Previously, flow analysis was using the `_identity` state for two purposes: 1. As the "if true" state for "false" and the "if false" state for "true". 2. As the base state for the "break" and "continue" code paths of loops, before any "break" or "continue" statements had been seen. For the first purpose, it is more consistent to use `_current.setReachable(false)`. This ensures that in code disabled by `if (false)`, promotions are not lost. For the second purpose, it is easier to just use `null` as the base state. There is a small behavioral change: previously in unreachable code, if we used the `_identity` state, all variables were considered assigned; otherwise they were considered assigned or not according to the state of the code prior to the branch point that caused the variables to become unassigned. Now, unreachable code consistently has the latter behavior. Change-Id: If77a3fcff9391b66164c0445d5242cb04c9a6b76 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/112023 Commit-Queue: Paul Berry <paulberry@google.com> Reviewed-by: Konstantin Shcheglov <scheglov@google.com>