]> Cypherpunks repositories - gostls13.git/commit
[release-branch.go1.18] go/types,types2: delay the check for conflicting struct field...
authorRobert Findley <rfindley@google.com>
Mon, 2 May 2022 15:13:08 +0000 (11:13 -0400)
committerHeschi Kreinick <heschi@google.com>
Mon, 9 May 2022 20:14:33 +0000 (20:14 +0000)
commitf4f19990c6b4de65e906e6bb2327cfa45ca1d072
treeb1c07484bdf49a69290afc8c59f380ea06f9f63d
parent1fb46d2a2026ca0adf5da77bba32f2a075fd6d86
[release-branch.go1.18] go/types,types2: delay the check for conflicting struct field names

In #52529, we observed that checking types for duplicate fields and
methods during method collection can result in incorrect early expansion
of the base type. Fix this by delaying the check for duplicate fields.
Notably, we can't delay the check for duplicate methods as we must
preserve the invariant that added method names are unique.

After this change, it may be possible in the presence of errors to have
a type-checked type containing a method name that conflicts with a field
name. With the previous logic conflicting methods would have been
skipped. This is a change in behavior, but only for invalid code.
Preserving the existing behavior would likely require delaying method
collection, which could have more significant consequences.

As a result of this change, the compiler test fixedbugs/issue28268.go
started passing with types2, being previously marked as broken. The fix
was not actually related to the duplicate method error, but rather the
fact that we stopped reporting redundant errors on the calls to x.b()
and x.E(), because they are now (valid!) methods.

Updates #52529
Fixes #52558

Change-Id: I850ce85c6ba76d79544f46bfd3deb8538d8c7d00
Reviewed-on: https://go-review.googlesource.com/c/go/+/403455
Reviewed-by: Robert Griesemer <gri@google.com>
Run-TryBot: Robert Findley <rfindley@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
(cherry picked from commit b75e492b35746ca3b327f7b353f4912e705a3125)
Reviewed-on: https://go-review.googlesource.com/c/go/+/403754
src/cmd/compile/internal/types2/decl.go
src/cmd/compile/internal/types2/testdata/fixedbugs/issue52529.go2 [new file with mode: 0644]
src/go/types/decl.go
src/go/types/testdata/fixedbugs/issue52529.go2 [new file with mode: 0644]
test/run.go