| // 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") |
| } |
| } |