Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

go/types, types2: type-checker internal type printing doesn't print embedded fields that are alias types correctly #44410

Open
griesemer opened this issue Feb 19, 2021 · 3 comments
Assignees
Labels
Milestone

Comments

@griesemer
Copy link
Contributor

@griesemer griesemer commented Feb 19, 2021

Given

type E = map[string]int
type S struct {
   E
}

the struct S will be printed with an embedded field named map[string]int because we have lost information about its alias name.

This affects debugging and test cases, e.g., src/go/internal/gccgoimporter/importer_test.go:97 wants "type S struct{b int; A2" but we only have "type S struct{b int; map[Y]Z}".

The relevant printing code is in go/types/typestring.go, function writeType.

@griesemer
Copy link
Contributor Author

@griesemer griesemer commented Feb 19, 2021

If we solve the type alias related issues (by introducing an explicit type alias node), this issue would probably be fixed as well.

@gopherbot
Copy link

@gopherbot gopherbot commented Feb 19, 2021

Change https://golang.org/cl/293962 mentions this issue: [dev.typeparams] go/types, types2: revert fancy struct printing (fixes x/tools tests)

gopherbot pushed a commit that referenced this issue Feb 19, 2021
…s x/tools tests)

An embedded struct field is embedded by mentioning its type.
The fact that the field name may be different and derived
from the type doesn't matter for the struct type.

Do print the embedded type rather than the derived field
name, as we have always done in the past. Remove the fancy
new code which was just plain wrong.

The struct output printing is only relevant for debugging
and test cases. Reverting to the original code (pre-generics)
fixes a couple of x/tools tests.

Unfortunately, the original code is (also) not correct for
embedded type aliases. Adjusted a gccgoimporter test
accordingly and filed issue #44410.

This is a follow-up on https://golang.org/cl/293961 which
addressed the issue only partially and left the incorrect
code in place.

Change-Id: Icb7a89c12ef7929c221fb1a5792f144f7fcd5855
Reviewed-on: https://go-review.googlesource.com/c/go/+/293962
Trust: Robert Griesemer <gri@golang.org>
Run-TryBot: Robert Griesemer <gri@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Robert Findley <rfindley@google.com>
@gopherbot
Copy link

@gopherbot gopherbot commented Sep 9, 2021

Change https://golang.org/cl/348737 mentions this issue: cmd/compile/internal/types2: print correct embedded field name

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Linked pull requests

Successfully merging a pull request may close this issue.

None yet
3 participants