GoPLS Viewer

Home|gopls/go/analysis/passes/unusedwrite/testdata/src/a/unusedwrite.go
1package a
2
3type T1 struct{ x int }
4
5type T2 struct {
6    x int
7    y int
8}
9
10type T3 struct{ y *T1 }
11
12func BadWrites() {
13    // Test struct field writes.
14    var s1 T1
15    s1.x = 10 // want "unused write to field x"
16
17    // Test array writes.
18    var s2 [10]int
19    s2[1] = 10 // want "unused write to array index 1:int"
20
21    // Test range variables of struct type.
22    s3 := []T1{T1{x100}}
23    for iv := range s3 {
24        v.x = i // want "unused write to field x"
25    }
26
27    // Test the case where a different field is read after the write.
28    s4 := []T2{T2{x1y2}}
29    for iv := range s4 {
30        v.x = i // want "unused write to field x"
31        _ = v.y
32    }
33}
34
35func (t T1BadValueReceiverWrite(v T2) {
36    t.x = 10 // want "unused write to field x"
37    v.y = 20 // want "unused write to field y"
38}
39
40func GoodWrites(m map[int]int) {
41    // A map is copied by reference such that a write will affect the original map.
42    m[1] = 10
43
44    // Test struct field writes.
45    var s1 T1
46    s1.x = 10
47    print(s1.x)
48
49    // Test array writes.
50    var s2 [10]int
51    s2[1] = 10
52    // Current the checker doesn't distinguish index 1 and index 2.
53    _ = s2[2]
54
55    // Test range variables of struct type.
56    s3 := []T1{T1{x100}}
57    for iv := range s3 { // v is a copy
58        v.x = i
59        _ = v.x // still a usage
60    }
61
62    // Test an object with multiple fields.
63    o := &T2{x10y20}
64    print(o)
65
66    // Test an object of embedded struct/pointer type.
67    t1 := &T1{x10}
68    t2 := &T3{yt1}
69    print(t2)
70}
71
72func (t *T1GoodPointerReceiverWrite(v *T2) {
73    t.x = 10
74    v.y = 20
75}
76
MembersX
BadWrites.RangeStmt_364.v
GoodWrites.RangeStmt_1133.i
T2.x
BadWrites.s1
BadWrites.RangeStmt_531.i
T1.GoodPointerReceiverWrite.v
T1
BadWrites.s2
T1.BadValueReceiverWrite
GoodWrites.RangeStmt_1133.v
GoodWrites.t2
T1.GoodPointerReceiverWrite.t
GoodWrites.s2
T2
T2.y
T3
BadWrites.s3
GoodWrites
GoodWrites.m
GoodWrites.s1
BadWrites.RangeStmt_531.v
T1.BadValueReceiverWrite.t
T1.BadValueReceiverWrite.v
GoodWrites.s3
T1.x
BadWrites
BadWrites.s4
GoodWrites.t1
T3.y
BadWrites.RangeStmt_364.i
GoodWrites.o
T1.GoodPointerReceiverWrite
Members
X