@@ -343,7 +343,10 @@ test "@ptrCast slice to pointer" {
343
343
}
344
344
345
345
test "slice syntax resulting in pointer-to-array" {
346
- if (builtin .zig_backend != .stage1 ) return error .SkipZigTest ; // TODO
346
+ if (builtin .zig_backend == .stage2_c ) return error .SkipZigTest ; // TODO
347
+ if (builtin .zig_backend == .stage2_x86_64 ) return error .SkipZigTest ; // TODO
348
+ if (builtin .zig_backend == .stage2_aarch64 ) return error .SkipZigTest ; // TODO
349
+ if (builtin .zig_backend == .stage2_arm ) return error .SkipZigTest ; // TODO
347
350
348
351
const S = struct {
349
352
fn doTheTest () ! void {
@@ -356,8 +359,6 @@ test "slice syntax resulting in pointer-to-array" {
356
359
try testPointer0 ();
357
360
try testPointerAlign ();
358
361
try testSlice ();
359
- try testSliceZ ();
360
- try testSlice0 ();
361
362
try testSliceOpt ();
362
363
try testSliceAlign ();
363
364
}
@@ -460,21 +461,6 @@ test "slice syntax resulting in pointer-to-array" {
460
461
comptime try expect (@TypeOf (slice .? [0.. 2]) == * [2 ]u8 );
461
462
}
462
463
463
- fn testSlice0 () ! void {
464
- {
465
- var array = [0 ]u8 {};
466
- var src_slice : []u8 = & array ;
467
- var slice = src_slice [0.. 0];
468
- comptime try expect (@TypeOf (slice ) == * [0 ]u8 );
469
- }
470
- {
471
- var array = [0 :0 ]u8 {};
472
- var src_slice : [:0 ]u8 = & array ;
473
- var slice = src_slice [0.. 0];
474
- comptime try expect (@TypeOf (slice ) == * [0 ]u8 );
475
- }
476
- }
477
-
478
464
fn testSliceAlign () ! void {
479
465
var array align (4 ) = [5 ]u8 { 1 , 2 , 3 , 4 , 5 };
480
466
var src_slice : []align (4 ) u8 = & array ;
@@ -494,6 +480,73 @@ test "slice syntax resulting in pointer-to-array" {
494
480
comptime try S .doTheTest ();
495
481
}
496
482
483
+ test "slice pointer-to-array null terminated" {
484
+ if (builtin .zig_backend == .stage2_c ) return error .SkipZigTest ; // TODO
485
+ if (builtin .zig_backend == .stage2_x86_64 ) return error .SkipZigTest ; // TODO
486
+ if (builtin .zig_backend == .stage2_aarch64 ) return error .SkipZigTest ; // TODO
487
+ if (builtin .zig_backend == .stage2_arm ) return error .SkipZigTest ; // TODO
488
+
489
+ comptime {
490
+ var array = [5 :0 ]u8 { 1 , 2 , 3 , 4 , 5 };
491
+ var slice : [:0 ]u8 = & array ;
492
+ try expect (@TypeOf (slice [1.. 3]) == * [2 ]u8 );
493
+ try expect (@TypeOf (slice [1.. 3 :4 ]) == * [2 :4 ]u8 );
494
+
495
+ if (builtin .zig_backend == .stage1 ) {
496
+ try expect (@TypeOf (slice [1.. ]) == [:0 ]u8 );
497
+ } else {
498
+ // stage2 gives a more accurate, correct answer
499
+ try expect (@TypeOf (slice [1.. ]) == * [4 :0 ]u8 );
500
+ }
501
+ }
502
+
503
+ var array = [5 :0 ]u8 { 1 , 2 , 3 , 4 , 5 };
504
+ var slice : [:0 ]u8 = & array ;
505
+ comptime try expect (@TypeOf (slice [1.. 3]) == * [2 ]u8 );
506
+ comptime try expect (@TypeOf (slice [1.. 3 :4 ]) == * [2 :4 ]u8 );
507
+ comptime try expect (@TypeOf (slice [1.. ]) == [:0 ]u8 );
508
+ }
509
+
510
+ test "slice pointer-to-array zero length" {
511
+ if (builtin .zig_backend == .stage2_c ) return error .SkipZigTest ; // TODO
512
+ if (builtin .zig_backend == .stage2_x86_64 ) return error .SkipZigTest ; // TODO
513
+ if (builtin .zig_backend == .stage2_aarch64 ) return error .SkipZigTest ; // TODO
514
+ if (builtin .zig_backend == .stage2_arm ) return error .SkipZigTest ; // TODO
515
+
516
+ comptime {
517
+ {
518
+ var array = [0 ]u8 {};
519
+ var src_slice : []u8 = & array ;
520
+ var slice = src_slice [0.. 0];
521
+ try expect (@TypeOf (slice ) == * [0 ]u8 );
522
+ }
523
+ {
524
+ var array = [0 :0 ]u8 {};
525
+ var src_slice : [:0 ]u8 = & array ;
526
+ var slice = src_slice [0.. 0];
527
+ if (builtin .zig_backend == .stage1 ) {
528
+ try expect (@TypeOf (slice ) == * [0 ]u8 );
529
+ } else {
530
+ // stage2 gives a more accurate, correct answer
531
+ try expect (@TypeOf (slice ) == * [0 :0 ]u8 );
532
+ }
533
+ }
534
+ }
535
+
536
+ {
537
+ var array = [0 ]u8 {};
538
+ var src_slice : []u8 = & array ;
539
+ var slice = src_slice [0.. 0];
540
+ comptime try expect (@TypeOf (slice ) == * [0 ]u8 );
541
+ }
542
+ {
543
+ var array = [0 :0 ]u8 {};
544
+ var src_slice : [:0 ]u8 = & array ;
545
+ var slice = src_slice [0.. 0];
546
+ comptime try expect (@TypeOf (slice ) == * [0 ]u8 );
547
+ }
548
+ }
549
+
497
550
test "type coercion of pointer to anon struct literal to pointer to slice" {
498
551
if (builtin .zig_backend == .stage2_c ) return error .SkipZigTest ; // TODO
499
552
if (builtin .zig_backend == .stage2_x86_64 ) return error .SkipZigTest ; // TODO
0 commit comments