aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/compile/internal/types2/testdata/examples
diff options
context:
space:
mode:
authorRobert Griesemer <gri@golang.org>2021-07-09 21:18:12 -0700
committerRobert Griesemer <gri@golang.org>2021-07-14 23:33:48 +0000
commit2a8087817c18314d81c4165258487cdba73ebc71 (patch)
treedeb784ee7f884be0013dbed05e26d2ce9c8aacc9 /src/cmd/compile/internal/types2/testdata/examples
parent95f8e64fc0ff53e4df6ba03e8dbbaf3d18695d1b (diff)
downloadgo-2a8087817c18314d81c4165258487cdba73ebc71.tar.gz
go-2a8087817c18314d81c4165258487cdba73ebc71.zip
[dev.typeparams] cmd/compile/internal/types2: cleanups around receiver type checks
Generic receiver types may be defined such that an instantiated receiver ends up being a pointer type. Disallow them as we do for non-generic receivers. Change-Id: I6612a52615a2999375c35aa1d69ab42f37d9f55d Reviewed-on: https://go-review.googlesource.com/c/go/+/333770 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/testdata/examples')
-rw-r--r--src/cmd/compile/internal/types2/testdata/examples/methods.go217
1 files changed, 17 insertions, 0 deletions
diff --git a/src/cmd/compile/internal/types2/testdata/examples/methods.go2 b/src/cmd/compile/internal/types2/testdata/examples/methods.go2
index 76c6539e1b..4e87041e54 100644
--- a/src/cmd/compile/internal/types2/testdata/examples/methods.go2
+++ b/src/cmd/compile/internal/types2/testdata/examples/methods.go2
@@ -6,6 +6,8 @@
package p
+import "unsafe"
+
// Parameterized types may have methods.
type T1[A any] struct{ a A }
@@ -94,3 +96,18 @@ func (_ T2[_, _, _]) _() int { return 42 }
type T0 struct{}
func (T0) _() {}
func (T1[A]) _() {}
+
+// A generic receiver type may constrain its type parameter such
+// that it must be a pointer type. Such receiver types are not
+// permitted.
+type T3a[P interface{ ~int | ~string | ~float64 }] P
+
+func (T3a[_]) m() {} // this is ok
+
+type T3b[P interface{ ~unsafe.Pointer }] P
+
+func (T3b /* ERROR invalid receiver */ [_]) m() {}
+
+type T3c[P interface{ *int | *string }] P
+
+func (T3c /* ERROR invalid receiver */ [_]) m() {}