Skip to content

Commit

Permalink
[dev.unified] test: add regress test for generic select statements
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
mdempsky committed Jun 29, 2022
1 parent 4b78ece commit 2280d89
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 0 deletions.
1 change: 1 addition & 0 deletions test/run.go
Expand Up @@ -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
Expand Down
26 changes: 26 additions & 0 deletions 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)
}
1 change: 1 addition & 0 deletions test/typeparam/mdempsky/18.out
@@ -0,0 +1 @@
int bool

0 comments on commit 2280d89

Please sign in to comment.