go/types, types2: add missing Unalias call to type string functionality

For #67547.

Change-Id: I999cd31f9a01f91e7984b4e7012c81e8bd9c6b06
Reviewed-on: https://go-review.googlesource.com/c/go/+/587940
Reviewed-by: Robert Griesemer <gri@google.com>
Auto-Submit: Robert Griesemer <gri@google.com>
Reviewed-by: Robert Findley <rfindley@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
This commit is contained in:
Robert Griesemer 2024-05-23 13:54:17 -07:00 committed by Robert Griesemer
parent acc93dac83
commit 13e3068b9c
3 changed files with 9 additions and 2 deletions

View File

@ -186,7 +186,7 @@ func operandString(x *operand, qf Qualifier) string {
} }
buf.WriteString(intro) buf.WriteString(intro)
WriteType(&buf, x.typ, qf) WriteType(&buf, x.typ, qf)
if tpar, _ := x.typ.(*TypeParam); tpar != nil { if tpar, _ := Unalias(x.typ).(*TypeParam); tpar != nil {
buf.WriteString(" constrained by ") buf.WriteString(" constrained by ")
WriteType(&buf, tpar.bound, qf) // do not compute interface type sets here WriteType(&buf, tpar.bound, qf) // do not compute interface type sets here
// If we have the type set and it's empty, say so for better error messages. // If we have the type set and it's empty, say so for better error messages.

View File

@ -190,7 +190,7 @@ func operandString(x *operand, qf Qualifier) string {
} }
buf.WriteString(intro) buf.WriteString(intro)
WriteType(&buf, x.typ, qf) WriteType(&buf, x.typ, qf)
if tpar, _ := x.typ.(*TypeParam); tpar != nil { if tpar, _ := Unalias(x.typ).(*TypeParam); tpar != nil {
buf.WriteString(" constrained by ") buf.WriteString(" constrained by ")
WriteType(&buf, tpar.bound, qf) // do not compute interface type sets here WriteType(&buf, tpar.bound, qf) // do not compute interface type sets here
// If we have the type set and it's empty, say so for better error messages. // If we have the type set and it's empty, say so for better error messages.

View File

@ -77,6 +77,13 @@ func _[P []int | struct{}]() {
_ = a _ = a
} }
func _[P any]() {
type A = P
var x A
// keep "constrained by" for aliased type parameters in error messages
var _ int = x // ERRORx `cannot use x \(variable of type (A|P) constrained by any\) as int value in variable declaration`
}
// Test case for go.dev/issue/67540. // Test case for go.dev/issue/67540.
func _() { func _() {
type ( type (