1 // Copyright 2022 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
4
5 // This file is tested when running "go test -run Manual"
6 // without source arguments. Use for one-off debugging.
7
8 package p
9
10 import "fmt"
11
12 type F[A, B any] int
13
14 func G[A, B any](F[A, B]) {
15 }
16
17 func _() {
18 // TODO(gri) only report one error below (issue #50932)
19 var x F /* ERROR got 1 arguments but 2 type parameters */ [int]
20 G(x /* ERROR does not match */)
21 }
22
23 // test case from issue
24 // (lots of errors but doesn't crash anymore)
25
26 type RC[G any, RG any] interface {
27 ~[]RG
28 }
29
30 type RG[G any] struct{}
31
32 type RSC[G any] []*RG[G]
33
34 type M[Rc RC[G, RG], G any, RG any] struct {
35 Fn func(Rc)
36 }
37
38 type NFn[Rc RC[G, RG], G any, RG any] func(Rc)
39
40 func NC[Rc RC[G, RG], G any, RG any](nFn NFn[Rc, G, RG]) {
41 var empty Rc
42 nFn(empty)
43 }
44
45 func NSG[G any](c RSC[G]) {
46 fmt.Println(c)
47 }
48
49 func MMD[Rc RC /* ERROR got 1 arguments */ [RG], RG any, G any]() M /* ERROR got 2 arguments */ [Rc, RG] {
50
51 var nFn NFn /* ERROR got 2 arguments */ [Rc, RG]
52
53 var empty Rc
54 switch any(empty).(type) {
55 case BC /* ERROR undeclared name: BC */ :
56
57 case RSC[G]:
58 nFn = NSG /* ERROR cannot use NSG\[G\] */ [G]
59 }
60
61 return M /* ERROR got 2 arguments */ [Rc, RG]{
62 Fn: func(rc Rc) {
63 NC(nFn /* ERROR does not match */ )
64 },
65 }
66
67 return M /* ERROR got 2 arguments */ [Rc, RG]{}
68 }
69
View as plain text