Skip to content

Commit

Permalink
go/types, types2: report error when using uninstantiated signature alias
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
griesemer authored and gopherbot committed May 29, 2024
1 parent ee29dbe commit 13c4909
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 2 deletions.
2 changes: 1 addition & 1 deletion src/cmd/compile/internal/types2/expr.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
}
Expand Down
2 changes: 1 addition & 1 deletion src/go/types/expr.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
}
Expand Down
19 changes: 19 additions & 0 deletions src/internal/types/testdata/fixedbugs/issue67683.go
Original file line number Diff line number Diff line change
@@ -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)

0 comments on commit 13c4909

Please sign in to comment.