2 // errorcheck -0 -N -d=nil
4 // Copyright 2013 The Go Authors. All rights reserved.
5 // Use of this source code is governed by a BSD-style
6 // license that can be found in the LICENSE file.
8 // Test that nil checks are inserted.
9 // Optimization is disabled, so redundant checks are not removed.
18 type BigStruct struct {
36 bigarrayp *[1 << 26]int
44 _ = *intp // ERROR "nil check"
45 _ = *arrayp // ERROR "nil check"
46 _ = *array0p // ERROR "nil check"
47 _ = *array0p // ERROR "nil check"
48 _ = *intp // ERROR "nil check"
49 _ = *arrayp // ERROR "nil check"
50 _ = *structp // ERROR "nil check"
51 _ = *emptyp // ERROR "nil check"
52 _ = *arrayp // ERROR "nil check"
60 bigarrayp *[1 << 20]int
67 _ = *intp // ERROR "nil check"
68 _ = *arrayp // ERROR "nil check"
69 _ = *array0p // ERROR "nil check"
70 _ = *array0p // ERROR "nil check"
71 _ = *intp // ERROR "nil check"
72 _ = *arrayp // ERROR "nil check"
73 _ = *structp // ERROR "nil check"
74 _ = *emptyp // ERROR "nil check"
75 _ = *arrayp // ERROR "nil check"
76 _ = *bigarrayp // ERROR "nil check"
77 _ = *bigstructp // ERROR "nil check"
78 _ = *empty1p // ERROR "nil check"
81 func fx10k() *[10000]int
85 func f3(x *[10000]int) {
86 // Using a huge type and huge offsets so the compiler
87 // does not expect the memory hardware to fault.
88 _ = x[9999] // ERROR "nil check"
91 if x[9999] != 0 { // ERROR "nil check"
97 _ = x[9999] // ERROR "nil check"
99 _ = x[9999] // ERROR "nil check"
101 _ = x[9999] // ERROR "nil check"
103 _ = x[9999] // ERROR "nil check"
107 _ = x[9999] // ERROR "nil check"
109 _ = x[9999] // ERROR "nil check"
111 _ = x[9999] // ERROR "nil check"
114 // This one is a bit redundant, if we figured out that
115 // x wasn't going to change across the function call.
116 // But it's a little complex to do and in practice doesn't
118 _ = x[9999] // ERROR "nil check"
125 _ = &x[9] // ERROR "nil check"
127 _ = &x[9] // ERROR "nil check"
129 _ = &x[9] // ERROR "nil check"
135 _ = &x[9] // ERROR "nil check"
137 _ = &x[9] // ERROR "nil check"
139 _ = &x[9] // ERROR "nil check"
144 func f4(x *[10]int) {
145 // Most of these have no checks because a real memory reference follows,
146 // and the offset is small enough that if x is nil, the address will still be
147 // in the first unmapped page of memory.
149 _ = x[9] // ERROR "nil check"
152 if x[9] != 0 { // ERROR "nil check"
158 _ = x[9] // ERROR "nil check"
160 _ = x[9] // ERROR "nil check"
162 _ = x[9] // ERROR "nil check"
164 _ = x[9] // ERROR "nil check"
168 _ = x[9] // ERROR "nil check"
170 _ = &x[9] // ERROR "nil check"
172 _ = x[9] // ERROR "nil check"
175 _ = x[9] // ERROR "nil check"
179 _ = &x[9] // ERROR "nil check"
181 _ = &x[9] // ERROR "nil check"
183 _ = &x[9] // ERROR "nil check"
186 func f5(m map[string]struct{}) bool {
187 // Existence-only map lookups should not generate a nil check