]> Cypherpunks repositories - gostls13.git/commitdiff
[dev.unified] test: add regress test for generic select statements
authorMatthew Dempsky <mdempsky@google.com>
Tue, 28 Jun 2022 23:30:29 +0000 (16:30 -0700)
committerMatthew Dempsky <mdempsky@google.com>
Wed, 29 Jun 2022 19:33:57 +0000 (19:33 +0000)
The Go 1.18 frontend ICEs on select case clauses that involve an
implicit conversion.

Change-Id: I1c0865bf97d8b0a8fbddb0da43333e909df0d38a
Reviewed-on: https://go-review.googlesource.com/c/go/+/414878
TryBot-Result: Gopher Robot <gobot@golang.org>
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com>
Reviewed-by: David Chase <drchase@google.com>
test/run.go
test/typeparam/mdempsky/18.go [new file with mode: 0644]
test/typeparam/mdempsky/18.out [new file with mode: 0644]

index c99f104cf67ec9711f6ffc35215abd2068369515..2a365da21c8a8f6182a32d968b14cb04e22fe59b 100644 (file)
@@ -1970,6 +1970,7 @@ var go118Failures = setOf(
        "typeparam/issue53477.go",  // 1.18 compiler mishandles generic interface-interface comparisons from value switch statements
        "typeparam/mdempsky/16.go", // 1.18 compiler uses interface shape type in failed type assertions
        "typeparam/mdempsky/17.go", // 1.18 compiler mishandles implicit conversions from range loops
+       "typeparam/mdempsky/18.go", // 1.18 compiler mishandles implicit conversions in select statements
 )
 
 // In all of these cases, the 1.17 compiler reports reasonable errors, but either the
diff --git a/test/typeparam/mdempsky/18.go b/test/typeparam/mdempsky/18.go
new file mode 100644 (file)
index 0000000..f4a4ec7
--- /dev/null
@@ -0,0 +1,26 @@
+// run
+
+// Copyright 2022 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.
+
+// Test that implicit conversions to interface type in a select/case
+// clause are compiled correctly.
+
+package main
+
+import "fmt"
+
+func main() { f[int]() }
+
+func f[T any]() {
+       ch := make(chan T)
+       close(ch)
+
+       var i, ok any
+       select {
+       case i, ok = <-ch:
+       }
+
+       fmt.Printf("%T %T\n", i, ok)
+}
diff --git a/test/typeparam/mdempsky/18.out b/test/typeparam/mdempsky/18.out
new file mode 100644 (file)
index 0000000..19f1c39
--- /dev/null
@@ -0,0 +1 @@
+int bool