blob: 83fb39be4c14f3a7fd517ef840c46d560482da6e [file] [log] [blame]
Russ Coxb4e92ce2013-07-01 20:32:36 -04001// errorcheck
2
3// Copyright 2013 The Go Authors. All rights reserved.
4// Use of this source code is governed by a BSD-style
5// license that can be found in the LICENSE file.
6
7package p
8
9var array *[10]int
10var slice []int
11var str string
12var i, j, k int
13
14func f() {
15 // check what missing arguments are allowed
16 _ = array[:]
17 _ = array[i:]
18 _ = array[:j]
19 _ = array[i:j]
20 _ = array[::] // ERROR "middle index required in 3-index slice" "final index required in 3-index slice"
21 _ = array[i::] // ERROR "middle index required in 3-index slice" "final index required in 3-index slice"
22 _ = array[:j:] // ERROR "final index required in 3-index slice"
Rob Pikea8fe1762013-08-19 12:05:33 +100023 _ = array[i:j:] // ERROR "final index required in 3-index slice"
Russ Coxb4e92ce2013-07-01 20:32:36 -040024 _ = array[::k] // ERROR "middle index required in 3-index slice"
25 _ = array[i::k] // ERROR "middle index required in 3-index slice"
26 _ = array[:j:k]
27 _ = array[i:j:k]
28
29 _ = slice[:]
30 _ = slice[i:]
31 _ = slice[:j]
32 _ = slice[i:j]
33 _ = slice[::] // ERROR "middle index required in 3-index slice" "final index required in 3-index slice"
34 _ = slice[i::] // ERROR "middle index required in 3-index slice" "final index required in 3-index slice"
35 _ = slice[:j:] // ERROR "final index required in 3-index slice"
36 _ = slice[i:j:] // ERROR "final index required in 3-index slice"
37 _ = slice[::k] // ERROR "middle index required in 3-index slice"
38 _ = slice[i::k] // ERROR "middle index required in 3-index slice"
39 _ = slice[:j:k]
40 _ = slice[i:j:k]
41
42 _ = str[:]
43 _ = str[i:]
44 _ = str[:j]
45 _ = str[i:j]
46 _ = str[::] // ERROR "3-index slice of string" "middle index required in 3-index slice" "final index required in 3-index slice"
47 _ = str[i::] // ERROR "3-index slice of string" "middle index required in 3-index slice" "final index required in 3-index slice"
48 _ = str[:j:] // ERROR "3-index slice of string" "final index required in 3-index slice"
49 _ = str[i:j:] // ERROR "3-index slice of string" "final index required in 3-index slice"
50 _ = str[::k] // ERROR "3-index slice of string" "middle index required in 3-index slice"
51 _ = str[i::k] // ERROR "3-index slice of string" "middle index required in 3-index slice"
52 _ = str[:j:k] // ERROR "3-index slice of string"
53 _ = str[i:j:k] // ERROR "3-index slice of string"
54
55 // check invalid indices
56 _ = array[1:2]
Ian Lance Taylor161a45a2013-12-12 17:18:12 -080057 _ = array[2:1] // ERROR "invalid slice index|inverted slice"
Russ Coxb4e92ce2013-07-01 20:32:36 -040058 _ = array[2:2]
59 _ = array[i:1]
60 _ = array[1:j]
61 _ = array[1:2:3]
Ian Lance Taylor161a45a2013-12-12 17:18:12 -080062 _ = array[1:3:2] // ERROR "invalid slice index|inverted slice"
63 _ = array[2:1:3] // ERROR "invalid slice index|inverted slice"
64 _ = array[2:3:1] // ERROR "invalid slice index|inverted slice"
65 _ = array[3:1:2] // ERROR "invalid slice index|inverted slice"
66 _ = array[3:2:1] // ERROR "invalid slice index|inverted slice"
Russ Coxb4e92ce2013-07-01 20:32:36 -040067 _ = array[i:1:2]
Ian Lance Taylor161a45a2013-12-12 17:18:12 -080068 _ = array[i:2:1] // ERROR "invalid slice index|inverted slice"
Russ Coxb4e92ce2013-07-01 20:32:36 -040069 _ = array[1:j:2]
70 _ = array[2:j:1] // ERROR "invalid slice index"
71 _ = array[1:2:k]
Ian Lance Taylor161a45a2013-12-12 17:18:12 -080072 _ = array[2:1:k] // ERROR "invalid slice index|inverted slice"
Russ Coxb4e92ce2013-07-01 20:32:36 -040073
74 _ = slice[1:2]
Ian Lance Taylor161a45a2013-12-12 17:18:12 -080075 _ = slice[2:1] // ERROR "invalid slice index|inverted slice"
Russ Coxb4e92ce2013-07-01 20:32:36 -040076 _ = slice[2:2]
77 _ = slice[i:1]
78 _ = slice[1:j]
79 _ = slice[1:2:3]
Ian Lance Taylor161a45a2013-12-12 17:18:12 -080080 _ = slice[1:3:2] // ERROR "invalid slice index|inverted slice"
81 _ = slice[2:1:3] // ERROR "invalid slice index|inverted slice"
82 _ = slice[2:3:1] // ERROR "invalid slice index|inverted slice"
83 _ = slice[3:1:2] // ERROR "invalid slice index|inverted slice"
84 _ = slice[3:2:1] // ERROR "invalid slice index|inverted slice"
Russ Coxb4e92ce2013-07-01 20:32:36 -040085 _ = slice[i:1:2]
Ian Lance Taylor161a45a2013-12-12 17:18:12 -080086 _ = slice[i:2:1] // ERROR "invalid slice index|inverted slice"
Russ Coxb4e92ce2013-07-01 20:32:36 -040087 _ = slice[1:j:2]
88 _ = slice[2:j:1] // ERROR "invalid slice index"
89 _ = slice[1:2:k]
Ian Lance Taylor161a45a2013-12-12 17:18:12 -080090 _ = slice[2:1:k] // ERROR "invalid slice index|inverted slice"
Russ Coxb4e92ce2013-07-01 20:32:36 -040091
92 _ = str[1:2]
Ian Lance Taylor161a45a2013-12-12 17:18:12 -080093 _ = str[2:1] // ERROR "invalid slice index|inverted slice"
Russ Coxb4e92ce2013-07-01 20:32:36 -040094 _ = str[2:2]
95 _ = str[i:1]
96 _ = str[1:j]
97
98 // check out of bounds indices on array
Ian Lance Taylor161a45a2013-12-12 17:18:12 -080099 _ = array[11:11] // ERROR "out of bounds"
100 _ = array[11:12] // ERROR "out of bounds"
101 _ = array[11:] // ERROR "out of bounds"
102 _ = array[:11] // ERROR "out of bounds"
103 _ = array[1:11] // ERROR "out of bounds"
104 _ = array[1:11:12] // ERROR "out of bounds"
105 _ = array[1:2:11] // ERROR "out of bounds"
106 _ = array[1:11:3] // ERROR "out of bounds|invalid slice index"
107 _ = array[11:2:3] // ERROR "out of bounds|inverted slice|invalid slice index"
108 _ = array[11:12:13] // ERROR "out of bounds"
Russ Coxb4e92ce2013-07-01 20:32:36 -0400109
110 // slice bounds not checked
111 _ = slice[11:11]
112 _ = slice[11:12]
113 _ = slice[11:]
114 _ = slice[:11]
115 _ = slice[1:11]
116 _ = slice[1:11:12]
117 _ = slice[1:2:11]
118 _ = slice[1:11:3] // ERROR "invalid slice index"
Ian Lance Taylor161a45a2013-12-12 17:18:12 -0800119 _ = slice[11:2:3] // ERROR "invalid slice index|inverted slice"
Russ Coxb4e92ce2013-07-01 20:32:36 -0400120 _ = slice[11:12:13]
121}