| ... | @@ -343,7 +343,10 @@ test "@ptrCast slice to pointer" { | ... | @@ -343,7 +343,10 @@ test "@ptrCast slice to pointer" { |
| 343 | } | 343 | } |
| 344 | | 344 | |
| 345 | test "slice syntax resulting in pointer-to-array" { | 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 | const S = struct { | 351 | const S = struct { |
| 349 | fn doTheTest() !void { | 352 | fn doTheTest() !void { |
| ... | @@ -356,8 +359,6 @@ test "slice syntax resulting in pointer-to-array" { | ... | @@ -356,8 +359,6 @@ test "slice syntax resulting in pointer-to-array" { |
| 356 | try testPointer0(); | 359 | try testPointer0(); |
| 357 | try testPointerAlign(); | 360 | try testPointerAlign(); |
| 358 | try testSlice(); | 361 | try testSlice(); |
| 359 | try testSliceZ(); | | |
| 360 | try testSlice0(); | | |
| 361 | try testSliceOpt(); | 362 | try testSliceOpt(); |
| 362 | try testSliceAlign(); | 363 | try testSliceAlign(); |
| 363 | } | 364 | } |
| ... | @@ -460,21 +461,6 @@ test "slice syntax resulting in pointer-to-array" { | ... | @@ -460,21 +461,6 @@ test "slice syntax resulting in pointer-to-array" { |
| 460 | comptime try expect(@TypeOf(slice.?[0..2]) == *[2]u8); | 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 | fn testSliceAlign() !void { | 464 | fn testSliceAlign() !void { |
| 479 | var array align(4) = [5]u8{ 1, 2, 3, 4, 5 }; | 465 | var array align(4) = [5]u8{ 1, 2, 3, 4, 5 }; |
| 480 | var src_slice: []align(4) u8 = &array; | 466 | var src_slice: []align(4) u8 = &array; |
| ... | @@ -494,6 +480,73 @@ test "slice syntax resulting in pointer-to-array" { | ... | @@ -494,6 +480,73 @@ test "slice syntax resulting in pointer-to-array" { |
| 494 | comptime try S.doTheTest(); | 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 | test "type coercion of pointer to anon struct literal to pointer to slice" { | 550 | test "type coercion of pointer to anon struct literal to pointer to slice" { |
| 498 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO | 551 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO |
| 499 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | 552 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |