// 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 method expressions with a derived receiver type and // promoted methods work correctly. package main func main() { F[int]() F[string]() } func F[X any]() { call(T[X].M, T[X].N) } func call[X any](fns ...func(T[X]) int) { for want, fn := range fns { if have := fn(T[X]{}); have != want { println("FAIL:", have, "!=", want) } } } type T[X any] struct { E1 *E2[*X] } type E1 struct{} type E2[_ any] struct{} func (E1) M() int { return 0 } func (*E2[_]) N() int { return 1 }