aboutsummaryrefslogtreecommitdiff
path: root/src/Sema.zig
diff options
context:
space:
mode:
authorRobin Voetter <robin@voetter.nl>2024-10-31 20:24:37 +0100
committerRobin Voetter <robin@voetter.nl>2024-11-08 20:38:20 +0100
commit08ad7afc1e90c68409e9dc869d9dc1dceb3e8564 (patch)
tree9e301aab7d78f1c1897dda1f56c61c48f9ab1a51 /src/Sema.zig
parente5f5229fd6f9d0fe684ab32cce8f2b18e02c115b (diff)
downloadzig-08ad7afc1e90c68409e9dc869d9dc1dceb3e8564.tar.gz
zig-08ad7afc1e90c68409e9dc869d9dc1dceb3e8564.zip
spirv: forbid pointer arithmetic
Diffstat (limited to 'src/Sema.zig')
-rw-r--r--src/Sema.zig18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/Sema.zig b/src/Sema.zig
index 65805b6a67..771f4a0540 100644
--- a/src/Sema.zig
+++ b/src/Sema.zig
@@ -17605,6 +17605,24 @@ fn analyzePtrArithmetic(
} else break :rs ptr_src;
};
+ const target = zcu.getTarget();
+ if (target_util.arePointersLogical(target, ptr_info.flags.address_space)) {
+ return sema.failWithOwnedErrorMsg(block, msg: {
+ const msg = try sema.errMsg(op_src, "illegal pointer arithmetic on pointer of type '{}'", .{ptr_ty.fmt(pt)});
+ errdefer msg.destroy(sema.gpa);
+
+ const backend = target_util.zigBackend(target, zcu.comp.config.use_llvm);
+ try sema.errNote(op_src, msg, "arithmetic cannot be performed on pointers with address space '{s}' on target {s}-{s} by compiler backend {s}", .{
+ @tagName(ptr_info.flags.address_space),
+ target.cpu.arch.genericName(),
+ @tagName(target.os.tag),
+ @tagName(backend),
+ });
+
+ break :msg msg;
+ });
+ }
+
try sema.requireRuntimeBlock(block, op_src, runtime_src);
return block.addInst(.{
.tag = air_tag,