Skip to content

Fix async awaiter result identity - #2758

Merged
DavidObando merged 2 commits into
mainfrom
fix/2750-async-tuple-awaiter
Jul 22, 2026
Merged

Fix async awaiter result identity#2758
DavidObando merged 2 commits into
mainfrom
fix/2750-async-tuple-awaiter

Conversation

@DavidObando

@DavidObando DavidObando commented Jul 22, 2026

Copy link
Copy Markdown
Owner

Summary

  • preserve symbolic result identity when pooling async state-machine awaiter fields
  • structurally key tuple and constructed generic projections instead of collapsing erased CLR shapes
  • encode arity-8+ tuples with canonical nested ValueTuple<T1,...,T7,TRest> construction, signatures, imported flattening, and ItemN access
  • cover arities 2, 3, 7, 8, 9, and 15; nested, generic, nullable, imported named tuples; and non-tuple controls with runtime + ILVerify tests

Validation

  • targeted/related Core tests: 21 passed
  • targeted/related Compiler tests: 12 passed
  • Core.Tests: 6,692 passed, 1 skipped
  • Compiler.Tests: 3,403 passed
  • RC-C13-10 Oahu replay: 24 findings before, 0 after
  • all required CI checks green

Deferred

  • none

Parser/binder already represented arity-8+ tuples, so no prerequisite issue was needed. Interpreter behavior remains unchanged per the requested compiler/emitter scope.

Fixes #2750

Key pooled awaiter fields by their emitted symbolic type so erased Task results, including tuples, retain distinct state-machine field and local identities.
Encode arity-eight and larger tuples with canonical nested ValueTuple TRest shapes, including imported and symbolic async result signatures, tuple construction, and ItemN access.
@DavidObando
DavidObando merged commit cc34602 into main Jul 22, 2026
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

gsc: await of Task tuple types awaiter as the first tuple element

1 participant