summaryrefslogtreecommitdiffstats
path: root/test/typeparam/mdempsky/20.go
diff options
context:
space:
mode:
Diffstat (limited to 'test/typeparam/mdempsky/20.go')
-rw-r--r--test/typeparam/mdempsky/20.go38
1 files changed, 38 insertions, 0 deletions
diff --git a/test/typeparam/mdempsky/20.go b/test/typeparam/mdempsky/20.go
new file mode 100644
index 0000000..6b97ca1
--- /dev/null
+++ b/test/typeparam/mdempsky/20.go
@@ -0,0 +1,38 @@
+// 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 }