go/ssa: use valid types for synthetic values - #669
Conversation
Range iterator and defer stack values use a private opaqueType. It is
not a valid go/types type, so ordinary type utilities may panic and
clients must detect it through implementation details.
Use inaccurate but valid Go types instead: () for range iterators and
*struct{} for defer stacks. This also removes the corresponding special
cases from substitution and sanity checking.
Fixes golang/go#19670.
Fixes golang/go#72914.
|
This PR (HEAD: 882dfa5) has been imported to Gerrit for code review. Please visit Gerrit at https://go-review.googlesource.com/c/tools/+/814561. Important tips:
|
|
Message from Alex Putman: Patch Set 1: Commit-Queue+1 Please don’t reply on this GitHub thread. Visit golang.org/cl/814561. |
|
Message from golang-scoped@luci-project-accounts.iam.gserviceaccount.com: Patch Set 1: Dry run: CV is trying the patch. Bot data: {"action":"start","triggered_at":"2026-08-21T17:06:07Z","revision":"1d80138628016bd19327318b479025125c7fe02a"} Please don’t reply on this GitHub thread. Visit golang.org/cl/814561. |
|
Message from Alex Putman: Patch Set 1: -Commit-Queue (Performed by <GERRIT_ACCOUNT_60063> on behalf of <GERRIT_ACCOUNT_4809514>) Please don’t reply on this GitHub thread. Visit golang.org/cl/814561. |
|
Message from golang-scoped@luci-project-accounts.iam.gserviceaccount.com: Patch Set 1: This CL has failed the run. Reason: Tryjob golang/try/x_tools-gotip-windows-386 has failed with summary (view all results):
To reproduce, try Additional links for debugging: Please don’t reply on this GitHub thread. Visit golang.org/cl/814561. |
|
Message from golang-scoped@luci-project-accounts.iam.gserviceaccount.com: Patch Set 1: LUCI-TryBot-Result-1 Please don’t reply on this GitHub thread. Visit golang.org/cl/814561. |
Range iterator and defer stack values currently use a private
opaqueType. It is not a valid go/types type, so ordinary type utilities
may panic and clients must detect it through implementation details.
LLGo currently uses reflection for this purpose.
Use inaccurate but valid Go types instead: () for range iterators and
*struct{} for defer stacks. These are the directions suggested in the
existing issue discussions. Remove the now-unneeded substitution and
sanity-check exceptions, and verify both values work with typeutil.Map.
This would let LLGo remove its private-type reflection workaround added
in xgo-dev/llgo#1826.
Fixes golang/go#19670.
Fixes golang/go#72914.