summaryrefslogtreecommitdiffstats
path: root/test/typeparam/issue50642.go
diff options
context:
space:
mode:
Diffstat (limited to 'test/typeparam/issue50642.go')
-rw-r--r--test/typeparam/issue50642.go63
1 files changed, 63 insertions, 0 deletions
diff --git a/test/typeparam/issue50642.go b/test/typeparam/issue50642.go
new file mode 100644
index 0000000..d2d4a66
--- /dev/null
+++ b/test/typeparam/issue50642.go
@@ -0,0 +1,63 @@
+// run
+
+// 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 main
+
+import "fmt"
+
+type Temp[T any] struct {
+}
+
+var temp, temp1 any
+var ch any
+
+func (it Temp[T]) HasNext() bool {
+ var ok bool
+ temp1 = <-ch.(chan T)
+ // test conversion of T to interface{} during an OAS2RECV
+ temp, ok = <-ch.(chan T)
+ return ok
+}
+
+type MyInt int
+
+func (i MyInt) String() string {
+ return "a"
+}
+
+type Stringer interface {
+ String() string
+}
+
+type Temp2[T Stringer] struct {
+}
+
+var temp2 Stringer
+
+func (it Temp2[T]) HasNext() string {
+ var x map[int]T
+
+ var ok bool
+ // test conversion of T to Stringer during an OAS2MAPR
+ temp2, ok = x[43]
+ _ = ok
+ return temp2.String()
+}
+
+func main() {
+ ch1 := make(chan int, 2)
+ ch1 <- 5
+ ch1 <- 6
+ ch = ch1
+ iter := Temp[int]{}
+ iter.HasNext()
+
+ iter2 := Temp2[MyInt]{}
+ if got, want := iter2.HasNext(), "a"; got != want {
+ panic(fmt.Sprintf("got %v, want %v", got, want))
+ }
+
+}