From 2280d897d6e936b47565504227355ad9a509c916 Mon Sep 17 00:00:00 2001 From: Matthew Dempsky Date: Tue, 28 Jun 2022 16:30:29 -0700 Subject: [PATCH] [dev.unified] test: add regress test for generic select statements 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 Run-TryBot: Matthew Dempsky Reviewed-by: Cuong Manh Le Reviewed-by: David Chase --- test/run.go | 1 + test/typeparam/mdempsky/18.go | 26 ++++++++++++++++++++++++++ test/typeparam/mdempsky/18.out | 1 + 3 files changed, 28 insertions(+) create mode 100644 test/typeparam/mdempsky/18.go create mode 100644 test/typeparam/mdempsky/18.out 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