]> Cypherpunks repositories - gostls13.git/commitdiff
go/types, types2: better error message for failing constraint type inference
authorRobert Griesemer <gri@golang.org>
Mon, 5 Dec 2022 22:09:09 +0000 (14:09 -0800)
committerGopher Robot <gobot@golang.org>
Mon, 5 Dec 2022 22:29:44 +0000 (22:29 +0000)
We know the type argument against which constraint type inference fails:
print the type argument instead of the corresponding type parameter.

Fixes #57096.

Change-Id: Ia1da9c87fac6f8062e4d534b82e895fa4617fddc
Reviewed-on: https://go-review.googlesource.com/c/go/+/455278
Auto-Submit: Robert Griesemer <gri@google.com>
Reviewed-by: Robert Griesemer <gri@google.com>
Run-TryBot: Robert Griesemer <gri@google.com>
Reviewed-by: Robert Findley <rfindley@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>

src/cmd/compile/internal/types2/infer.go
src/go/types/infer.go
src/internal/types/testdata/fixedbugs/issue45985.go

index 717f7dde286e3eb24df92d53455574697d6fdb54..1075457acaf097664114704ec4c442c38f6d35f3 100644 (file)
@@ -537,7 +537,7 @@ func (check *Checker) inferB(pos syntax.Pos, tparams []*TypeParam, targs []Type)
                                                if core.tilde {
                                                        tilde = "~"
                                                }
-                                               check.errorf(pos, InvalidTypeArg, "%s does not match %s%s", tpar, tilde, core.typ)
+                                               check.errorf(pos, InvalidTypeArg, "%s does not match %s%s", tx, tilde, core.typ)
                                                return nil, 0
                                        }
 
index 5a762a78ab04fe4a3c7e5123025500c3aa11fc57..1c1d4e03fcdf1403d80bd39c505836132f12c323 100644 (file)
@@ -534,7 +534,7 @@ func (check *Checker) inferB(posn positioner, tparams []*TypeParam, targs []Type
                                                if core.tilde {
                                                        tilde = "~"
                                                }
-                                               check.errorf(posn, InvalidTypeArg, "%s does not match %s%s", tpar, tilde, core.typ)
+                                               check.errorf(posn, InvalidTypeArg, "%s does not match %s%s", tx, tilde, core.typ)
                                                return nil, 0
                                        }
 
index 9a0f5e36970058c347a5f312609f6821c208be59..ae04ce2715bf352fd130b4030cc3148a7aa974e7 100644 (file)
@@ -5,9 +5,9 @@
 package issue45985
 
 func app[S interface{ ~[]T }, T any](s S, e T) S {
-    return append(s, e)
+       return append(s, e)
 }
 
 func _() {
-       _ = app/* ERROR "S does not match" */[int]
+       _ = app /* ERROR "int does not match" */ [int]
 }