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}