1
0
mirror of https://github.com/golang/go synced 2024-11-24 09:00:13 -07:00

cmd/compile/internal/types2: adjust printing of type parameter in error

For constraint type inference failures where the type parameter doesn't
match the constraint, print the type parameter rather than its type name
object. This provides more flexibility for improving the error message
down the road.

Change-Id: I188871d6f26a16cd96e59770966a1ec65607b128
Reviewed-on: https://go-review.googlesource.com/c/go/+/360514
Trust: Robert Griesemer <gri@golang.org>
Reviewed-by: Robert Findley <rfindley@google.com>
This commit is contained in:
Robert Griesemer 2021-11-01 13:41:32 -07:00
parent d39c873966
commit 599de4b2c3
2 changed files with 5 additions and 4 deletions

View File

@ -378,7 +378,6 @@ func (check *Checker) inferB(tparams []*TypeParam, targs []Type) (types []Type,
// If a constraint has a structural type, unify the corresponding type parameter with it.
for _, tpar := range tparams {
typ := tpar
sbound := structure(tpar)
if sbound != nil {
// If the structural type is the underlying type of a single
@ -386,8 +385,10 @@ func (check *Checker) inferB(tparams []*TypeParam, targs []Type) (types []Type,
if named, _ := tpar.singleType().(*Named); named != nil {
sbound = named
}
if !u.unify(typ, sbound) {
check.errorf(tpar.obj, "%s does not match %s", tpar.obj, sbound)
if !u.unify(tpar, sbound) {
// TODO(gri) improve error message by providing the type arguments
// which we know already
check.errorf(tpar.obj, "%s does not match %s", tpar, sbound)
return nil, 0
}
}

View File

@ -5,7 +5,7 @@
package issue45985
// TODO(gri): this error should be on app[int] below.
func app[S /* ERROR "type S S does not match" */ interface{ ~[]T }, T any](s S, e T) S {
func app[S /* ERROR "S does not match" */ interface{ ~[]T }, T any](s S, e T) S {
return append(s, e)
}