]> Cypherpunks.ru repositories - gostls13.git/commit
go/types,types2: delay the check for conflicting struct field names
authorRobert Findley <rfindley@google.com>
Mon, 2 May 2022 15:13:08 +0000 (11:13 -0400)
committerRobert Findley <rfindley@google.com>
Tue, 3 May 2022 14:14:31 +0000 (14:14 +0000)
commitb75e492b35746ca3b327f7b353f4912e705a3125
tree0375af2168a3123301ccbd7c5442dc4fa91cd17a
parenta41e37f56a4fc2523ac88a76bf54ba3e45dcf533
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.

Fixes #52529

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>
src/cmd/compile/internal/types2/decl.go
src/cmd/compile/internal/types2/testdata/fixedbugs/issue52529.go [new file with mode: 0644]
src/go/types/decl.go
src/go/types/testdata/fixedbugs/issue52529.go [new file with mode: 0644]
test/run.go