Skip to content

go/ssa: use valid types for synthetic values - #669

Open
cpunion wants to merge 1 commit into
golang:masterfrom
cpunion:valid-ssa-opaque-types
Open

go/ssa: use valid types for synthetic values#669
cpunion wants to merge 1 commit into
golang:masterfrom
cpunion:valid-ssa-opaque-types

Conversation

@cpunion

@cpunion cpunion commented Aug 13, 2026

Copy link
Copy Markdown

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.

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.
@gopherbot

Copy link
Copy Markdown
Contributor

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:

  • Don't comment on this PR. All discussion takes place in Gerrit.
  • You need a Gmail or other Google account to log in to Gerrit.
  • To change your code in response to feedback:
    • Push a new commit to the branch used by your GitHub PR.
    • A new "patch set" will then appear in Gerrit.
    • Respond to each comment by marking as Done in Gerrit if implemented as suggested. You can alternatively write a reply.
    • Critical: you must click the blue Reply button near the top to publish your Gerrit responses.
    • Multiple commits in the PR will be squashed by GerritBot.
  • The title and description of the GitHub PR are used to construct the final commit message.
    • Edit these as needed via the GitHub web interface (not via Gerrit or git).
    • You should word wrap the PR description at ~76 characters unless you need longer lines (e.g., for tables or URLs).
  • See the Sending a change via GitHub and Reviews sections of the Contribution Guide as well as the FAQ for details.

@gopherbot

Copy link
Copy Markdown
Contributor

Message from Alex Putman:

Patch Set 1: Commit-Queue+1


Please don’t reply on this GitHub thread. Visit golang.org/cl/814561.
After addressing review feedback, remember to publish your drafts!

@gopherbot

Copy link
Copy Markdown
Contributor

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.
After addressing review feedback, remember to publish your drafts!

@gopherbot

Copy link
Copy Markdown
Contributor

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.
After addressing review feedback, remember to publish your drafts!

@gopherbot

Copy link
Copy Markdown
Contributor

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 gomote repro 8672840301939121233.

Additional links for debugging:


Please don’t reply on this GitHub thread. Visit golang.org/cl/814561.
After addressing review feedback, remember to publish your drafts!

@gopherbot

Copy link
Copy Markdown
Contributor

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.
After addressing review feedback, remember to publish your drafts!

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.

x/tools/go/ssa: no way to determine type of *deferStack x/tools/go/ssa: make opaqueType less annoying to use

2 participants