go/types, types2: union terms must be instantiated

Fixes #48083.

Change-Id: I77899d3e6edc806dee770403b3c3c4e2974d0e50
Reviewed-on: https://go-review.googlesource.com/c/go/+/346293
Trust: Robert Griesemer <gri@golang.org>
Reviewed-by: Robert Findley <rfindley@google.com>
This commit is contained in:
Robert Griesemer 2021-08-30 18:07:54 -07:00
parent ded10d75a9
commit 605d1aaea2
4 changed files with 20 additions and 2 deletions

View file

@ -0,0 +1,9 @@
// Copyright 2021 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 T[P any] struct{}
type _ interface{ int | T /* ERROR cannot use generic type */ }

View file

@ -122,7 +122,7 @@ func parseTilde(check *Checker, x syntax.Expr) (tilde bool, typ Type) {
x = op.X
tilde = true
}
typ = check.anyType(x)
typ = check.typ(x)
// embedding stand-alone type parameters is not permitted (issue #47127).
if _, ok := under(typ).(*TypeParam); ok {
check.error(x, "cannot embed a type parameter")

View file

@ -0,0 +1,9 @@
// Copyright 2021 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 T[P any] struct{}
type _ interface{ int | T /* ERROR cannot use generic type */ }

View file

@ -125,7 +125,7 @@ func parseTilde(check *Checker, x ast.Expr) (tilde bool, typ Type) {
x = op.X
tilde = true
}
typ = check.anyType(x)
typ = check.typ(x)
// embedding stand-alone type parameters is not permitted (issue #47127).
if _, ok := under(typ).(*TypeParam); ok {
check.error(x, _Todo, "cannot embed a type parameter")