| author | |
| committer | |
| log | ba4aa12098a0a9def52582cecd5b0b664ded14d8 |
| tree | fbb7caad7c97b10a7db6f07a7d76d1fd026390b8 |
| parent | 40578656e85a4bd930b03c143f179d43a925d151 |
Closes #130342 files changed, 12 insertions(+), 1 deletions(-)
src/Sema.zig+1-1| ... | ... | @@ -18352,7 +18352,7 @@ fn zirPtrCast(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air |
| 18352 | 18352 | return sema.failWithOwnedErrorMsg(msg); |
| 18353 | 18353 | } |
| 18354 | 18354 | |
| 18355 | if (try sema.resolveMaybeUndefVal(block, operand_src, operand)) |operand_val| { | |
| 18355 | if (try sema.resolveMaybeUndefVal(block, operand_src, ptr)) |operand_val| { | |
| 18356 | 18356 | if (!dest_ty.ptrAllowsZero() and operand_val.isUndef()) { |
| 18357 | 18357 | return sema.failWithUseOfUndef(block, operand_src); |
| 18358 | 18358 | } |
test/behavior/pointers.zig+11| ... | ... | @@ -483,3 +483,14 @@ test "pointer to constant decl preserves alignment" { |
| 483 | 483 | const alignment = @typeInfo(@TypeOf(&S.aligned)).Pointer.alignment; |
| 484 | 484 | try std.testing.expect(alignment == 8); |
| 485 | 485 | } |
| 486 | ||
| 487 | test "ptrCast comptime known slice to C pointer" { | |
| 488 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO | |
| 489 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO | |
| 490 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO | |
| 491 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 492 | ||
| 493 | const s: [:0]const u8 = "foo"; | |
| 494 | var p = @ptrCast([*c]const u8, s); | |
| 495 | try std.testing.expectEqualStrings(s, std.mem.sliceTo(p, 0)); | |
| 496 | } |