From 19ed442807499080cf9c31ac883d4195db5415c9 Mon Sep 17 00:00:00 2001 From: Matthew Dempsky Date: Tue, 21 Jun 2022 07:15:33 -0700 Subject: [PATCH] test: add regress test for #53477 This test already passes for GOEXPERIMENT=unified; add regress test to ensure it stays that way. Updates #53477. Change-Id: Ib7aa7428260595077052207899edcc044a6ab1c8 Reviewed-on: https://go-review.googlesource.com/c/go/+/413394 Run-TryBot: Matthew Dempsky Auto-Submit: Matthew Dempsky Reviewed-by: David Chase --- src/go/internal/gcimporter/gcimporter_test.go | 1 + test/run.go | 1 + test/typeparam/issue53477.go | 34 +++++++++++++++++++ 3 files changed, 36 insertions(+) create mode 100644 test/typeparam/issue53477.go diff --git a/src/go/internal/gcimporter/gcimporter_test.go b/src/go/internal/gcimporter/gcimporter_test.go index 9aca6216a7..b32de17910 100644 --- a/src/go/internal/gcimporter/gcimporter_test.go +++ b/src/go/internal/gcimporter/gcimporter_test.go @@ -178,6 +178,7 @@ func TestImportTypeparamTests(t *testing.T) { "nested.go": "fails to compile", // TODO(rfindley): investigate this. "issue50417.go": "inconsistent interface member sorting", "issue53419.go": "fails to compile", + "issue53477.go": "fails to compile", } for _, entry := range list { diff --git a/test/run.go b/test/run.go index 8934e23b38..224d24db90 100644 --- a/test/run.go +++ b/test/run.go @@ -1967,6 +1967,7 @@ var go118Failures = setOf( "typeparam/nested.go", // 1.18 compiler doesn't support function-local types with generics "typeparam/issue51521.go", // 1.18 compiler produces bad panic message and link error "typeparam/issue53419.go", // 1.18 compiler mishandles generic selector resolution + "typeparam/issue53477.go", // 1.18 compiler mishandles generic interface-interface comparisons from value switch statements ) // In all of these cases, the 1.17 compiler reports reasonable errors, but either the diff --git a/test/typeparam/issue53477.go b/test/typeparam/issue53477.go new file mode 100644 index 0000000000..d128a7e848 --- /dev/null +++ b/test/typeparam/issue53477.go @@ -0,0 +1,34 @@ +// 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 generic interface-interface comparisons resulting from +// value switch statements are handled correctly. + +package main + +func main() { + f[X](0) +} + +type Mer[T any] interface{ M(T) } +type MNer[T any] interface { + Mer[T] + N() +} + +type X int + +func (X) M(X) {} +func (X) N() {} + +func f[T MNer[T]](t T) { + switch Mer[T](t) { + case MNer[T](t): + // ok + default: + panic("FAIL") + } +}