master
1const builtin = @import("builtin");
2
3test "comptime slice-sentinel in bounds (unterminated)" {
4 // array
5 comptime {
6 var target = [_]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{undefined} ** 10;
7 const slice = target[0..3 :'d'];
8 _ = slice;
9 }
10
11 // ptr_array
12 comptime {
13 var buf = [_]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{undefined} ** 10;
14 var target = &buf;
15 const slice = target[0..3 :'d'];
16 _ = slice;
17 }
18
19 // vector_ConstPtrSpecialBaseArray
20 comptime {
21 var buf = [_]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{undefined} ** 10;
22 var target: [*]u8 = &buf;
23 const slice = target[0..3 :'d'];
24 _ = slice;
25 }
26
27 // vector_ConstPtrSpecialRef
28 comptime {
29 var buf = [_]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{undefined} ** 10;
30 var target: [*]u8 = @as([*]u8, @ptrCast(&buf));
31 const slice = target[0..3 :'d'];
32 _ = slice;
33 }
34
35 // cvector_ConstPtrSpecialBaseArray
36 comptime {
37 var buf = [_]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{undefined} ** 10;
38 var target: [*c]u8 = &buf;
39 const slice = target[0..3 :'d'];
40 _ = slice;
41 }
42
43 // cvector_ConstPtrSpecialRef
44 comptime {
45 var buf = [_]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{undefined} ** 10;
46 var target: [*c]u8 = @as([*c]u8, @ptrCast(&buf));
47 const slice = target[0..3 :'d'];
48 _ = slice;
49 }
50
51 // slice
52 comptime {
53 var buf = [_]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{undefined} ** 10;
54 var target: []u8 = &buf;
55 const slice = target[0..3 :'d'];
56 _ = slice;
57 }
58}
59
60test "comptime slice-sentinel in bounds (end,unterminated)" {
61 // array
62 comptime {
63 var target = [_]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{0xff} ** 10;
64 const slice = target[0..13 :0xff];
65 _ = slice;
66 }
67
68 // ptr_array
69 comptime {
70 var buf = [_]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{0xff} ** 10;
71 var target = &buf;
72 const slice = target[0..13 :0xff];
73 _ = slice;
74 }
75
76 // vector_ConstPtrSpecialBaseArray
77 comptime {
78 var buf = [_]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{0xff} ** 10;
79 var target: [*]u8 = &buf;
80 const slice = target[0..13 :0xff];
81 _ = slice;
82 }
83
84 // vector_ConstPtrSpecialRef
85 comptime {
86 var buf = [_]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{0xff} ** 10;
87 var target: [*]u8 = @as([*]u8, @ptrCast(&buf));
88 const slice = target[0..13 :0xff];
89 _ = slice;
90 }
91
92 // cvector_ConstPtrSpecialBaseArray
93 comptime {
94 var buf = [_]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{0xff} ** 10;
95 var target: [*c]u8 = &buf;
96 const slice = target[0..13 :0xff];
97 _ = slice;
98 }
99
100 // cvector_ConstPtrSpecialRef
101 comptime {
102 var buf = [_]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{0xff} ** 10;
103 var target: [*c]u8 = @as([*c]u8, @ptrCast(&buf));
104 const slice = target[0..13 :0xff];
105 _ = slice;
106 }
107
108 // slice
109 comptime {
110 var buf = [_]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{0xff} ** 10;
111 var target: []u8 = &buf;
112 const slice = target[0..13 :0xff];
113 _ = slice;
114 }
115}
116
117test "comptime slice-sentinel in bounds (terminated)" {
118 // array
119 comptime {
120 var target = [_:0]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{undefined} ** 10;
121 const slice = target[0..3 :'d'];
122 _ = slice;
123 }
124
125 // ptr_array
126 comptime {
127 var buf = [_:0]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{undefined} ** 10;
128 var target = &buf;
129 const slice = target[0..3 :'d'];
130 _ = slice;
131 }
132
133 // vector_ConstPtrSpecialBaseArray
134 comptime {
135 var buf = [_:0]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{undefined} ** 10;
136 var target: [*]u8 = &buf;
137 const slice = target[0..3 :'d'];
138 _ = slice;
139 }
140
141 // vector_ConstPtrSpecialRef
142 comptime {
143 var buf = [_:0]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{undefined} ** 10;
144 var target: [*]u8 = @as([*]u8, @ptrCast(&buf));
145 const slice = target[0..3 :'d'];
146 _ = slice;
147 }
148
149 // cvector_ConstPtrSpecialBaseArray
150 comptime {
151 var buf = [_:0]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{undefined} ** 10;
152 var target: [*c]u8 = &buf;
153 const slice = target[0..3 :'d'];
154 _ = slice;
155 }
156
157 // cvector_ConstPtrSpecialRef
158 comptime {
159 var buf = [_:0]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{undefined} ** 10;
160 var target: [*c]u8 = @as([*c]u8, @ptrCast(&buf));
161 const slice = target[0..3 :'d'];
162 _ = slice;
163 }
164
165 // slice
166 comptime {
167 var buf = [_:0]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{undefined} ** 10;
168 var target: []u8 = &buf;
169 const slice = target[0..3 :'d'];
170 _ = slice;
171 }
172}
173
174test "comptime slice-sentinel in bounds (on target sentinel)" {
175 // array
176 comptime {
177 var target = [_:0]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{undefined} ** 10;
178 const slice = target[0..14 :0];
179 _ = slice;
180 }
181
182 // ptr_array
183 comptime {
184 var buf = [_:0]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{undefined} ** 10;
185 var target = &buf;
186 const slice = target[0..14 :0];
187 _ = slice;
188 }
189
190 // vector_ConstPtrSpecialBaseArray
191 comptime {
192 var buf = [_:0]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{undefined} ** 10;
193 var target: [*]u8 = &buf;
194 const slice = target[0..14 :0];
195 _ = slice;
196 }
197
198 // vector_ConstPtrSpecialRef
199 comptime {
200 var buf = [_:0]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{undefined} ** 10;
201 var target: [*]u8 = @as([*]u8, @ptrCast(&buf));
202 const slice = target[0..14 :0];
203 _ = slice;
204 }
205
206 // cvector_ConstPtrSpecialBaseArray
207 comptime {
208 var buf = [_:0]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{undefined} ** 10;
209 var target: [*c]u8 = &buf;
210 const slice = target[0..14 :0];
211 _ = slice;
212 }
213
214 // cvector_ConstPtrSpecialRef
215 comptime {
216 var buf = [_:0]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{undefined} ** 10;
217 var target: [*c]u8 = @as([*c]u8, @ptrCast(&buf));
218 const slice = target[0..14 :0];
219 _ = slice;
220 }
221
222 // slice
223 comptime {
224 var buf = [_:0]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{undefined} ** 10;
225 var target: []u8 = &buf;
226 const slice = target[0..14 :0];
227 _ = slice;
228 }
229}