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