diff --git a/test/run.go b/test/run.go index c99f104cf67ec..2a365da21c8a8 100644 --- a/test/run.go +++ b/test/run.go @@ -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 index 0000000000000..f4a4ec73c5eb6 --- /dev/null +++ b/test/typeparam/mdempsky/18.go @@ -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 index 0000000000000..19f1c39a22d99 --- /dev/null +++ b/test/typeparam/mdempsky/18.out @@ -0,0 +1 @@ +int bool