authorgravatar for robin@voetter.nlRobin Voetter <robin@voetter.nl> 2024-10-31 20:24:37+01:00
committergravatar for robin@voetter.nlRobin Voetter <robin@voetter.nl> 2024-11-08 20:38:20+01:00
log08ad7afc1e90c68409e9dc869d9dc1dceb3e8564
tree9e301aab7d78f1c1897dda1f56c61c48f9ab1a51
parente5f5229fd6f9d0fe684ab32cce8f2b18e02c115b
signaturebadge-check Signed by SSH key SHA256:ZS52FNyUv2WUXvO4njmVaFVO46RHojFuOrxRc4LuKzg

spirv: forbid pointer arithmetic


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

src/Sema.zig+18
...@@ -17605,6 +17605,24 @@ fn analyzePtrArithmetic(...@@ -17605,6 +17605,24 @@ fn analyzePtrArithmetic(
17605 } else break :rs ptr_src;17605 } else break :rs ptr_src;
17606 };17606 };
1760717607
17608 const target = zcu.getTarget();
17609 if (target_util.arePointersLogical(target, ptr_info.flags.address_space)) {
17610 return sema.failWithOwnedErrorMsg(block, msg: {
17611 const msg = try sema.errMsg(op_src, "illegal pointer arithmetic on pointer of type '{}'", .{ptr_ty.fmt(pt)});
17612 errdefer msg.destroy(sema.gpa);
17613
17614 const backend = target_util.zigBackend(target, zcu.comp.config.use_llvm);
17615 try sema.errNote(op_src, msg, "arithmetic cannot be performed on pointers with address space '{s}' on target {s}-{s} by compiler backend {s}", .{
17616 @tagName(ptr_info.flags.address_space),
17617 target.cpu.arch.genericName(),
17618 @tagName(target.os.tag),
17619 @tagName(backend),
17620 });
17621
17622 break :msg msg;
17623 });
17624 }
17625
17608 try sema.requireRuntimeBlock(block, op_src, runtime_src);17626 try sema.requireRuntimeBlock(block, op_src, runtime_src);
17609 return block.addInst(.{17627 return block.addInst(.{
17610 .tag = air_tag,17628 .tag = air_tag,