authorgravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-10-29 15:18:07+03:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-10-29 19:44:35+03:00
log7705a4e8651a493590eed5a79d5361bc6b54985e
treec9c834441f236f358d87734b1e56010acbaeb80a
parent278c32976e93f4900c634913fb2bb06f6a7ecf87

Sema: wrap optionals in `zirPtrCast` when needed


1 files changed, 3 insertions(+), 0 deletions(-)

src/Sema.zig+3
......@@ -18947,6 +18947,9 @@ fn zirPtrCast(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air
1894718947 if (!dest_ty.ptrAllowsZero() and operand_val.isNull()) {
1894818948 return sema.fail(block, operand_src, "null pointer casted to type {}", .{dest_ty.fmt(sema.mod)});
1894918949 }
18950 if (dest_ty.zigTypeTag() == .Optional and sema.typeOf(ptr).zigTypeTag() != .Optional) {
18951 return sema.addConstant(dest_ty, try Value.Tag.opt_payload.create(sema.arena, operand_val));
18952 }
1895018953 return sema.addConstant(aligned_dest_ty, operand_val);
1895118954 }
1895218955