aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRobert Griesemer <gri@golang.org>2024-05-28 14:18:42 -0700
committerGopher Robot <gobot@golang.org>2024-05-29 02:09:54 +0000
commit13c49096fd3b08ef53742dd7ae8bcfbfa45f3173 (patch)
tree50236c5f571b67909781bb51c01f30fc49233e13 /src
parentee29dbe43eeb28a2834803e8e1275f1dccb18bc2 (diff)
downloadgo-13c49096fd3b08ef53742dd7ae8bcfbfa45f3173.tar.xz
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>
Diffstat (limited to 'src')
-rw-r--r--src/cmd/compile/internal/types2/expr.go2
-rw-r--r--src/go/types/expr.go2
-rw-r--r--src/internal/types/testdata/fixedbugs/issue67683.go19
3 files changed, 21 insertions, 2 deletions
diff --git a/src/cmd/compile/internal/types2/expr.go b/src/cmd/compile/internal/types2/expr.go
index da676f47da..92949a924d 100644
--- a/src/cmd/compile/internal/types2/expr.go
+++ b/src/cmd/compile/internal/types2/expr.go
@@ -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"
}
diff --git a/src/go/types/expr.go b/src/go/types/expr.go
index 474db75cc8..cf8ceddc9a 100644
--- a/src/go/types/expr.go
+++ b/src/go/types/expr.go
@@ -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"
}
diff --git a/src/internal/types/testdata/fixedbugs/issue67683.go b/src/internal/types/testdata/fixedbugs/issue67683.go
new file mode 100644
index 0000000000..f7c9bcdd01
--- /dev/null
+++ b/src/internal/types/testdata/fixedbugs/issue67683.go
@@ -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)