aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/compile/internal/types2/union.go
diff options
context:
space:
mode:
authorRobert Griesemer <gri@golang.org>2021-07-12 22:39:39 -0700
committerRobert Griesemer <gri@golang.org>2021-07-14 23:33:52 +0000
commit4ff0e04c2e409aaeebe0cf5287dbed735f84e974 (patch)
treee2d67f5e15c375721fadeaef5fd34e6e9c0ba9b8 /src/cmd/compile/internal/types2/union.go
parent3a047326e896302724378e5d6b8684851ccfdbfd (diff)
downloadgo-4ff0e04c2e409aaeebe0cf5287dbed735f84e974.tar.gz
go-4ff0e04c2e409aaeebe0cf5287dbed735f84e974.zip
[dev.typeparams] cmd/compile/internal/types2: embedding stand-alone type parameters is not permitted
For #47127. Change-Id: Ie979ff56ae7c2dd0e5ce0ff39588f98ae68b5ee9 Reviewed-on: https://go-review.googlesource.com/c/go/+/334151 Trust: Robert Griesemer <gri@golang.org> Run-TryBot: Robert Griesemer <gri@golang.org> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Robert Findley <rfindley@google.com>
Diffstat (limited to 'src/cmd/compile/internal/types2/union.go')
-rw-r--r--src/cmd/compile/internal/types2/union.go11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/cmd/compile/internal/types2/union.go b/src/cmd/compile/internal/types2/union.go
index e5e851c1d2..5983a73ec6 100644
--- a/src/cmd/compile/internal/types2/union.go
+++ b/src/cmd/compile/internal/types2/union.go
@@ -128,13 +128,18 @@ func parseUnion(check *Checker, tlist []syntax.Expr) Type {
return newUnion(types, tilde)
}
-func parseTilde(check *Checker, x syntax.Expr) (Type, bool) {
- tilde := false
+func parseTilde(check *Checker, x syntax.Expr) (typ Type, tilde bool) {
if op, _ := x.(*syntax.Operation); op != nil && op.Op == syntax.Tilde {
x = op.X
tilde = true
}
- return check.anyType(x), tilde
+ typ = check.anyType(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")
+ typ = Typ[Invalid]
+ }
+ return
}
// intersect computes the intersection of the types x and y,