| ... | ... | @@ -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 |