2 // errorcheck -0 -d=ssa/loopbce/debug=3
6 func f0a(a []int) int {
8 for i := range a { // ERROR "Induction variable with minimum 0 and increment 1$"
9 x += a[i] // ERROR "Found redundant IsInBounds$"
14 func f0b(a []int) int {
16 for i := range a { // ERROR "Induction variable with minimum 0 and increment 1$"
17 b := a[i:] // ERROR "Found redundant IsSliceInBounds$"
23 func f0c(a []int) int {
25 for i := range a { // ERROR "Induction variable with minimum 0 and increment 1$"
26 b := a[:i+1] // ERROR "Found redundant IsSliceInBounds \(len promoted to cap\)$"
32 func f1(a []int) int {
34 for _, i := range a { // ERROR "Induction variable with minimum 0 and increment 1$"
40 func f2(a []int) int {
42 for i := 1; i < len(a); i++ { // ERROR "Induction variable with minimum 1 and increment 1$"
43 x += a[i] // ERROR "Found redundant IsInBounds$"
48 func f4(a [10]int) int {
50 for i := 0; i < len(a); i += 2 { // ERROR "Induction variable with minimum 0 and increment 2$"
51 x += a[i] // ERROR "Found redundant IsInBounds$"
56 func f5(a [10]int) int {
58 for i := -10; i < len(a); i += 2 { // ERROR "Induction variable with minimum -10 and increment 2$"
65 for i := range a { // ERROR "Induction variable with minimum 0 and increment 1$"
66 b := a[0:i] // ERROR "Found redundant IsSliceInBounds \(len promoted to cap\)$"
71 func g0a(a string) int {
73 for i := 0; i < len(a); i++ { // ERROR "Induction variable with minimum 0 and increment 1$"
74 x += int(a[i]) // ERROR "Found redundant IsInBounds$"
79 func g0b(a string) int {
81 for i := 0; len(a) > i; i++ { // ERROR "Induction variable with minimum 0 and increment 1$"
82 x += int(a[i]) // ERROR "Found redundant IsInBounds$"
90 for i := 0; i < len(a); i += 2 { // ERROR "Induction variable with minimum 0 and increment 2$"
91 x += int(a[i]) // ERROR "Found redundant IsInBounds$"
99 for i := 0; i < len(a); i += 2 { // ERROR "Induction variable with minimum 0 and increment 2$"
101 if a[i] == 'e' { // ERROR "Found redundant IsInBounds$"
110 a := "this string has length 25"
111 for i := 0; i < len(a); i += 5 { // ERROR "Induction variable with minimum 0 and increment 5$"
112 useString(a[i:]) // ERROR "Found redundant IsSliceInBounds$"
118 for i := 0; i < len(a); i++ { // ERROR "Induction variable with minimum 0 and increment 1$"
119 useString(a[i+1:]) // ERROR "Found redundant IsSliceInBounds$"
124 for i := 0; i < len(a); i++ { // ERROR "Induction variable with minimum 0 and increment 1$"
125 useString(a[:i+1]) // ERROR "Found redundant IsSliceInBounds$"
131 for i := range c { // ERROR "Induction variable with minimum 0 and increment 1$"
132 c[i] = byte(i) // ERROR "Found redundant IsInBounds$"
137 for i := range a[:128] { // ERROR "Induction variable with minimum 0 and increment 1$"
142 func k0(a [100]int) [100]int {
143 for i := 10; i < 90; i++ { // ERROR "Induction variable with minimum 10 and increment 1$"
145 a[i-10] = i // ERROR "Found redundant \(IsInBounds ind 100\), ind < 80$"
146 a[i-5] = i // ERROR "Found redundant \(IsInBounds ind 100\), ind < 85$"
147 a[i] = i // ERROR "Found redundant \(IsInBounds ind 100\), ind < 90$"
148 a[i+5] = i // ERROR "Found redundant \(IsInBounds ind 100\), ind < 95$"
149 a[i+10] = i // ERROR "Found redundant \(IsInBounds ind 100\), ind < 100$"
155 func k1(a [100]int) [100]int {
156 for i := 10; i < 90; i++ { // ERROR "Induction variable with minimum 10 and increment 1$"
158 useSlice(a[:i-10]) // ERROR "Found redundant \(IsSliceInBounds ind 100\), ind < 80$"
159 useSlice(a[:i-5]) // ERROR "Found redundant \(IsSliceInBounds ind 100\), ind < 85$"
160 useSlice(a[:i]) // ERROR "Found redundant \(IsSliceInBounds ind 100\), ind < 90$"
161 useSlice(a[:i+5]) // ERROR "Found redundant \(IsSliceInBounds ind 100\), ind < 95$"
162 useSlice(a[:i+10]) // ERROR "Found redundant \(IsSliceInBounds ind 100\), ind < 100$"
163 useSlice(a[:i+11]) // ERROR "Found redundant \(IsSliceInBounds ind 100\), ind < 101$"
169 func k2(a [100]int) [100]int {
170 for i := 10; i < 90; i++ { // ERROR "Induction variable with minimum 10 and increment 1$"
172 useSlice(a[i-10:]) // ERROR "Found redundant \(IsSliceInBounds ind 100\), ind < 80$"
173 useSlice(a[i-5:]) // ERROR "Found redundant \(IsSliceInBounds ind 100\), ind < 85$"
174 useSlice(a[i:]) // ERROR "Found redundant \(IsSliceInBounds ind 100\), ind < 90$"
175 useSlice(a[i+5:]) // ERROR "Found redundant \(IsSliceInBounds ind 100\), ind < 95$"
176 useSlice(a[i+10:]) // ERROR "Found redundant \(IsSliceInBounds ind 100\), ind < 100$"
177 useSlice(a[i+11:]) // ERROR "Found redundant \(IsSliceInBounds ind 100\), ind < 101$"
182 func k3(a [100]int) [100]int {
183 for i := -10; i < 90; i++ { // ERROR "Induction variable with minimum -10 and increment 1$"
184 a[i+10] = i // ERROR "Found redundant \(IsInBounds ind 100\), ind < 100$"
189 func k4(a [100]int) [100]int {
191 for i := min; i < min+50; i++ { // ERROR "Induction variable with minimum -9223372036854775808 and increment 1$"
192 a[i-min] = i // ERROR "Found redundant \(IsInBounds ind 100\), ind < 50$"
197 func k5(a [100]int) [100]int {
199 for i := max - 50; i < max; i++ { // ERROR "Induction variable with minimum 9223372036854775757 and increment 1$"
200 a[i-max+50] = i // ERROR "Found redundant \(IsInBounds ind 100\), ind < 50$"
201 a[i-(max-70)] = i // ERROR "Found redundant \(IsInBounds ind 100\), ind < 70$"
207 // tests overflow of max-min
208 a := int64(9223372036854774057)
213 panic("invalid test: modulos should differ")
216 for i := b; i < a; i += z {
217 // No induction variable is possible because i will overflow a first iteration.
222 func nobce2(a string) {
223 for i := int64(0); i < int64(len(a)); i++ { // ERROR "Induction variable with minimum 0 and increment 1$"
224 useString(a[i:]) // ERROR "Found redundant IsSliceInBounds$"
226 for i := int64(0); i < int64(len(a))-31337; i++ { // ERROR "Induction variable with minimum 0 and increment 1$"
227 useString(a[i:]) // ERROR "Found redundant IsSliceInBounds$"
229 for i := int64(0); i < int64(len(a))+int64(-1<<63); i++ { // ERROR "Induction variable with minimum 0 and increment 1$"
230 // tests an overflow of StringLen-MinInt64
235 func nobce3(a [100]int64) [100]int64 {
236 min := int64((-1) << 63)
237 max := int64((1 << 63) - 1)
238 for i := min; i < max; i++ { // ERROR "Induction variable with minimum -9223372036854775808 and increment 1$"
245 func useString(a string) {
249 func useSlice(a []int) {