aboutsummaryrefslogtreecommitdiff
path: root/test/typeparam/smoketest.go
diff options
context:
space:
mode:
authorRobert Griesemer <gri@golang.org>2020-10-12 16:19:49 -0700
committerRobert Griesemer <gri@golang.org>2020-10-13 04:48:43 +0000
commit48755e06aa2ed6ec977efc6df976bcc375a2e6f2 (patch)
tree0b95f142c7a1f99fb7403220761b48bf93a7d4dd /test/typeparam/smoketest.go
parent7668f02dec44690ee61722f08b2d80b5b0c5eccd (diff)
downloadgo-48755e06aa2ed6ec977efc6df976bcc375a2e6f2.tar.gz
go-48755e06aa2ed6ec977efc6df976bcc375a2e6f2.zip
[dev.typeparams] cmd/compile: enable parsing of generic code with new -G flag
Providing the -G flag instructs the compiler to accept type parameters. For now, the compiler only parses such files and then exits. Added a new test directory (test/typeparam) and initial test case. Port from dev.go2go branch. Change-Id: Ic11e33a9d5f012f8def0bdae205043659562ac73 Reviewed-on: https://go-review.googlesource.com/c/go/+/261660 Trust: Robert Griesemer <gri@golang.org> Run-TryBot: Robert Griesemer <gri@golang.org> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Diffstat (limited to 'test/typeparam/smoketest.go')
-rw-r--r--test/typeparam/smoketest.go57
1 files changed, 57 insertions, 0 deletions
diff --git a/test/typeparam/smoketest.go b/test/typeparam/smoketest.go
new file mode 100644
index 0000000000..d17809eb63
--- /dev/null
+++ b/test/typeparam/smoketest.go
@@ -0,0 +1,57 @@
+// compile -G
+
+// Copyright 2020 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.
+
+// This file checks simple code using type parameters.
+
+package smoketest
+
+// type parameters for functions
+func f1[P any]()
+func f2[P1, P2 any, P3 any]()
+func f3[P interface{}](x P, y T1[int])
+
+// function instantiations
+var _ = f1[int]
+var _ = f2[int, string, struct{}]
+var _ = f3[bool]
+
+// type parameters for types
+type T1[P any] struct{}
+type T2[P1, P2 any, P3 any] struct{}
+type T3[P interface{}] interface{}
+
+// type instantiations
+type _ T1[int]
+type _ T2[int, string, struct{}]
+type _ T3[bool]
+
+// methods
+func (T1[P]) m1() {}
+func (x T2[P1, P2, P3]) m1() {}
+func (_ T3[_]) m1() {}
+
+// type lists
+type _ interface {
+ m1()
+ m2()
+ type int, float32, string
+ m3()
+ type bool
+}
+
+// embedded instantiated types
+type _ struct {
+ f1, f2 int
+ T1[int]
+ T2[int, string, struct{}]
+ T3[bool]
+}
+
+type _ interface {
+ m1()
+ m2()
+ T3[bool]
+}