aboutsummaryrefslogtreecommitdiff
path: root/test/typeparam
diff options
context:
space:
mode:
authorKeith Randall <khr@golang.org>2021-10-18 10:59:29 -0700
committerKeith Randall <khr@golang.org>2021-10-19 22:47:48 +0000
commit2be5b846650aa4674a4eca7c11f303673b69a35a (patch)
treece7b48a4bbb5fb2b32cd21e18f2b9d864bd83083 /test/typeparam
parent9fa85518ff84420af644b1dd82ff311a39cd99c1 (diff)
downloadgo-2be5b846650aa4674a4eca7c11f303673b69a35a.tar.xz
cmd/compile: allow importing and exporting of ODYNAMICTYPE
Change-Id: I2fca7a801c85ed93c002c23bfcb0cf9593f1bdf4 Reviewed-on: https://go-review.googlesource.com/c/go/+/356571 Trust: Keith Randall <khr@golang.org> Trust: Dan Scales <danscales@google.com> Run-TryBot: Keith Randall <khr@golang.org> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Dan Scales <danscales@google.com>
Diffstat (limited to 'test/typeparam')
-rw-r--r--test/typeparam/issue49027.dir/a.go34
-rw-r--r--test/typeparam/issue49027.dir/main.go8
2 files changed, 42 insertions, 0 deletions
diff --git a/test/typeparam/issue49027.dir/a.go b/test/typeparam/issue49027.dir/a.go
index d3ec27deab..da88297965 100644
--- a/test/typeparam/issue49027.dir/a.go
+++ b/test/typeparam/issue49027.dir/a.go
@@ -15,7 +15,41 @@ func conv[T any](v interface{}) T {
func Conv2(v interface{}) (string, bool) {
return conv2[string](v)
}
+
func conv2[T any](v interface{}) (T, bool) {
x, ok := v.(T)
return x, ok
}
+
+func Conv3(v interface{}) string {
+ return conv3[string](v)
+}
+
+func conv3[T any](v interface{}) T {
+ switch v := v.(type) {
+ case T:
+ return v
+ default:
+ var z T
+ return z
+ }
+}
+
+type Mystring string
+
+func (Mystring) Foo() {
+}
+
+func Conv4(v interface{Foo()}) Mystring {
+ return conv4[Mystring](v)
+}
+
+func conv4[T interface{Foo()}](v interface{Foo()}) T {
+ switch v := v.(type) {
+ case T:
+ return v
+ default:
+ var z T
+ return z
+ }
+}
diff --git a/test/typeparam/issue49027.dir/main.go b/test/typeparam/issue49027.dir/main.go
index d0dc33d734..aa20a2fdfb 100644
--- a/test/typeparam/issue49027.dir/main.go
+++ b/test/typeparam/issue49027.dir/main.go
@@ -22,4 +22,12 @@ func main() {
if y != s {
panic(fmt.Sprintf("got %s wanted %s", y, s))
}
+ z := a.Conv3(s)
+ if z != s {
+ panic(fmt.Sprintf("got %s wanted %s", z, s))
+ }
+ w := a.Conv4(a.Mystring(s))
+ if w != a.Mystring(s) {
+ panic(fmt.Sprintf("got %s wanted %s", w, s))
+ }
}