Files
sdk/tests/language
Paul Berry 3eb697c0af [flow analysis] Fix unsound type promotion in inner async/generator functions.
An `await` expression or `yield` statement suspends the current
function and allows other code in the same isolate to execute. In the
case of nested functions, an `await` or `yield` in the inner function
can allow the outer function to continue executing. That means that if
the inner function promotes a local variable belonging to the outer
function, then it isn't sound to carry that promotion past an `await`
or `yield`.

This change fixes the unsoundness by adding a flow analysis method
`suspension`, which the shared type analysis logic uses to tell flow
analysis that an `await` or `yield` has been found. The `suspension`
method un-does the promotions of any variables that might be written
to while the inner function is suspended.

Fixes https://github.com/dart-lang/sdk/issues/62889.

Change-Id: I77eaf997159819a7c50f44b67174d2aa6a6a6964
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/499382
Reviewed-by: Johnni Winther <johnniwinther@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Bob Nystrom <rnystrom@google.com>
2026-05-01 07:16:25 -07:00
..
2024-12-13 10:52:25 -08:00
2024-12-20 02:39:21 -08:00
2025-02-26 10:39:51 -08:00
2025-02-05 08:36:21 -08:00
2025-02-05 08:36:21 -08:00
2025-02-19 04:21:42 -08:00
2025-02-19 04:21:42 -08:00
2025-11-14 03:01:16 -08:00
2025-09-30 06:52:53 -07:00
2025-02-11 15:31:25 -08:00
2026-03-20 09:09:46 -07:00