1
0
mirror of https://github.com/golang/go synced 2024-11-15 00:30:31 -07:00

go/types, types2: report error when using uninstantiated signature alias

For #67547.
Fixes #67683.

Change-Id: I9487820ab4e2bd257d253a7016df45729b29f836
Reviewed-on: https://go-review.googlesource.com/c/go/+/588855
Auto-Submit: Robert Griesemer <gri@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Robert Findley <rfindley@google.com>
Reviewed-by: Robert Griesemer <gri@google.com>
This commit is contained in:
Robert Griesemer 2024-05-28 14:18:42 -07:00 committed by Gopher Robot
parent ee29dbe43e
commit 13c49096fd
3 changed files with 21 additions and 2 deletions

View File

@ -1013,7 +1013,7 @@ func (check *Checker) nonGeneric(T *target, x *operand) {
}
var what string
switch t := x.typ.(type) {
case *Named:
case *Alias, *Named:
if isGeneric(t) {
what = "type"
}

View File

@ -998,7 +998,7 @@ func (check *Checker) nonGeneric(T *target, x *operand) {
}
var what string
switch t := x.typ.(type) {
case *Named:
case *Alias, *Named:
if isGeneric(t) {
what = "type"
}

View File

@ -0,0 +1,19 @@
// -goexperiment=aliastypeparams -gotypesalias=1
// Copyright 2024 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package p
type A[P any] func()
// alias signature types
type B[P any] = func()
type C[P any] = B[P]
var _ = A /* ERROR "cannot use generic type A without instantiation" */ (nil)
// generic alias signature types must be instantiated before use
var _ = B /* ERROR "cannot use generic type B without instantiation" */ (nil)
var _ = C /* ERROR "cannot use generic type C without instantiation" */ (nil)