Giant blob of minor changes
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / honnef.co / go / tools@v0.0.1-2020.1.5 / staticcheck / testdata / src / CheckSelfAssignment / CheckSelfAssignment.go
1 package pkg
2
3 func fn(x int) {
4         var z int
5         var y int
6         x = x             // want `self-assignment`
7         y = y             // want `self-assignment`
8         y, x, z = y, x, 1 // want `self-assignment of y to y` `self-assignment of x to x`
9         y = x
10         _ = y
11         _ = x
12         _ = z
13         func() {
14                 x := x
15                 println(x)
16         }()
17 }
18
19 func fn1() {
20         var (
21                 x  []byte
22                 ch chan int
23         )
24         x[42] = x[42]                         // want `self-assignment`
25         x[pure(42)] = x[pure(42)]             // want `self-assignment`
26         x[pure(pure(42))] = x[pure(pure(42))] // want `self-assignment`
27         x[impure(42)] = x[impure(42)]
28         x[impure(pure(42))] = x[impure(pure(42))]
29         x[pure(impure(42))] = x[pure(impure(42))]
30         x[pure(<-ch)] = x[pure(<-ch)]
31         x[pure(pure(<-ch))] = x[pure(pure(<-ch))]
32         x[<-ch] = x[<-ch]
33
34         type T struct {
35                 x []int
36         }
37         var ts []T
38         ts[impure(42)].x = ts[impure(42)].x
39         m := map[*int]int{}
40         m[ptr1()] = m[ptr1()]
41         m[ptr2()] = m[ptr2()]
42         m[new(int)] = m[new(int)]
43
44         m2 := map[int]int{}
45         m2[len(x)] = m2[len(x)] // want `self-assignment`
46
47         gen1()[0] = gen1()[0]
48         gen2(0)[0] = gen2(0)[0] // want `self-assignment`
49         gen3(0)[0] = gen3(0)[0]
50 }
51
52 func ptr1() *int {
53         return new(int)
54 }
55
56 func ptr2() *int {
57         x := 0
58         return &x
59 }
60
61 func gen1() []int {
62         return nil
63 }
64
65 func gen2(x int) []int {
66         return nil
67 }
68
69 func gen3(x int) []int {
70         return make([]int, 0)
71 }
72
73 func pure(n int) int {
74         return n
75 }
76
77 func impure(n int) int {
78         println(n)
79         return n
80 }