2 // errorcheck -0 -d=ssa/prove/debug=1
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 "Proved 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 "Proved 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 "Proved IsSliceInBounds$"
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 "Proved 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 "Proved 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 "Proved IsSliceInBounds$"
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 "Proved 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 "Proved 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 "Proved 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 "Proved 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 "Proved IsSliceInBounds$"
118 for i := 0; i < len(a); i++ { // ERROR "Induction variable with minimum 0 and increment 1$"
119 useString(a[i+1:]) // ERROR "Proved IsSliceInBounds$"
124 for i := 0; i < len(a); i++ { // ERROR "Induction variable with minimum 0 and increment 1$"
125 useString(a[:i+1]) // ERROR "Proved IsSliceInBounds$"
131 for i := range c { // ERROR "Induction variable with minimum 0 and increment 1$"
132 c[i] = byte(i) // ERROR "Proved 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 "Proved IsInBounds$"
146 a[i-5] = i // ERROR "Proved IsInBounds$"
147 a[i] = i // ERROR "Proved IsInBounds$"
148 a[i+5] = i // ERROR "Proved IsInBounds$"
149 a[i+10] = i // ERROR "Proved IsInBounds$"
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 "Proved IsSliceInBounds$"
159 useSlice(a[:i-5]) // ERROR "Proved IsSliceInBounds$"
160 useSlice(a[:i]) // ERROR "Proved IsSliceInBounds$"
161 useSlice(a[:i+5]) // ERROR "Proved IsSliceInBounds$"
162 useSlice(a[:i+10]) // ERROR "Proved IsSliceInBounds$"
163 useSlice(a[:i+11]) // ERROR "Proved IsSliceInBounds$"
170 func k2(a [100]int) [100]int {
171 for i := 10; i < 90; i++ { // ERROR "Induction variable with minimum 10 and increment 1$"
173 useSlice(a[i-10:]) // ERROR "Proved IsSliceInBounds$"
174 useSlice(a[i-5:]) // ERROR "Proved IsSliceInBounds$"
175 useSlice(a[i:]) // ERROR "Proved IsSliceInBounds$"
176 useSlice(a[i+5:]) // ERROR "Proved IsSliceInBounds$"
177 useSlice(a[i+10:]) // ERROR "Proved IsSliceInBounds$"
178 useSlice(a[i+11:]) // ERROR "Proved IsSliceInBounds$"
184 func k3(a [100]int) [100]int {
185 for i := -10; i < 90; i++ { // ERROR "Induction variable with minimum -10 and increment 1$"
187 a[i+10] = i // ERROR "Proved IsInBounds$"
193 func k4(a [100]int) [100]int {
195 for i := min; i < min+50; i++ { // ERROR "Induction variable with minimum -9223372036854775808 and increment 1$"
196 a[i-min] = i // ERROR "Proved IsInBounds$"
201 func k5(a [100]int) [100]int {
203 for i := max - 50; i < max; i++ { // ERROR "Induction variable with minimum 9223372036854775757 and increment 1$"
204 a[i-max+50] = i // ERROR "Proved IsInBounds$"
205 a[i-(max-70)] = i // ERROR "Proved IsInBounds$"
211 // tests overflow of max-min
212 a := int64(9223372036854774057)
217 panic("invalid test: modulos should differ")
220 for i := b; i < a; i += z {
221 // No induction variable is possible because i will overflow a first iteration.
226 func nobce2(a string) {
227 for i := int64(0); i < int64(len(a)); i++ { // ERROR "Induction variable with minimum 0 and increment 1$"
228 useString(a[i:]) // ERROR "Proved IsSliceInBounds$"
230 for i := int64(0); i < int64(len(a))-31337; i++ { // ERROR "Induction variable with minimum 0 and increment 1$"
231 useString(a[i:]) // ERROR "Proved IsSliceInBounds$"
233 for i := int64(0); i < int64(len(a))+int64(-1<<63); i++ { // ERROR "Induction variable with minimum 0 and increment 1$"
234 // tests an overflow of StringLen-MinInt64
239 func nobce3(a [100]int64) [100]int64 {
240 min := int64((-1) << 63)
241 max := int64((1 << 63) - 1)
242 for i := min; i < max; i++ { // ERROR "Induction variable with minimum -9223372036854775808 and increment 1$"
249 func useString(a string) {
253 func useSlice(a []int) {