]> Cypherpunks repositories - gostls13.git/commit
go/types, types2: make function type inference argument-order independent
authorRobert Griesemer <gri@golang.org>
Tue, 11 Jan 2022 23:36:38 +0000 (15:36 -0800)
committerRobert Griesemer <gri@golang.org>
Wed, 12 Jan 2022 19:03:10 +0000 (19:03 +0000)
commit68b3d36ff4e71d68f25d36caff8b4ba2b3b9c980
tree8ec99692a646e2f385ba24221da6020ba5e77e80
parent83bfdb6561c06bd890446af01b0f0c735360a8df
go/types, types2: make function type inference argument-order independent

If we have more than 2 arguments, we may have arguments with named and
unnamed types. If that is the case, permutate params and args such that
the arguments with named types are first in the list. This doesn't affect
type inference if all types are taken as is. But when we have inexact
unification enabled (as is the case for function type inference), when
a named type is unified with an unnamed type, unification proceeds with
the underlying type of the named type because otherwise unification would
fail right away. This leads to an asymmetry in type inference: in cases
where arguments of named and unnamed types are passed to parameters with
identical type, different types (named vs underlying) may be inferred
depending on the order of the arguments.
By ensuring that named types are seen first, order dependence is avoided
and unification succeeds where it can.

This CL implements the respectice code but keeps it disabled for now,
pending decision whether we want to address this issue in the first
place.

For #43056.

Change-Id: Ibe3b08ec2afe90a24a8c30cd1875d504bcc2ef39
Reviewed-on: https://go-review.googlesource.com/c/go/+/377894
Trust: Robert Griesemer <gri@golang.org>
Run-TryBot: Robert Griesemer <gri@golang.org>
Reviewed-by: Robert Findley <rfindley@google.com>
src/cmd/compile/internal/types2/infer.go
src/cmd/compile/internal/types2/testdata/fixedbugs/issue43056.go2 [new file with mode: 0644]
src/go/types/infer.go
src/go/types/testdata/fixedbugs/issue43056.go2 [new file with mode: 0644]