aboutsummaryrefslogtreecommitdiff
path: root/test/cases/compile_errors/spirv_merge_logical_pointers.zig
diff options
context:
space:
mode:
authorRobin Voetter <robin@voetter.nl>2024-10-27 16:31:45 +0100
committerRobin Voetter <robin@voetter.nl>2024-10-27 16:31:45 +0100
commit49a067ccfe6cc3ee59b0fe0f2dc32f80ab75d574 (patch)
tree349a61aee17121afb7a63e37c6ce4c49073ab8cb /test/cases/compile_errors/spirv_merge_logical_pointers.zig
parent39013619b943956f0c26422a01f026d845dc96a9 (diff)
downloadzig-49a067ccfe6cc3ee59b0fe0f2dc32f80ab75d574.tar.gz
zig-49a067ccfe6cc3ee59b0fe0f2dc32f80ab75d574.zip
spirv: forbid merging logical pointers
Under some architecture/operating system combinations it is forbidden to return a pointer from a merge, as these pointers must point to a location at compile time. This adds a check for those cases when returning a pointer from a block merge.
Diffstat (limited to 'test/cases/compile_errors/spirv_merge_logical_pointers.zig')
-rw-r--r--test/cases/compile_errors/spirv_merge_logical_pointers.zig19
1 files changed, 19 insertions, 0 deletions
diff --git a/test/cases/compile_errors/spirv_merge_logical_pointers.zig b/test/cases/compile_errors/spirv_merge_logical_pointers.zig
new file mode 100644
index 0000000000..ea81ef903c
--- /dev/null
+++ b/test/cases/compile_errors/spirv_merge_logical_pointers.zig
@@ -0,0 +1,19 @@
+export fn a() void {
+ var x: *i32 = undefined;
+ _ = &x;
+ var y: *i32 = undefined;
+ _ = &y;
+ var rt_cond = false;
+ _ = &rt_cond;
+
+ var z = if (rt_cond) x else y;
+ _ = &z;
+}
+
+// error
+// backend=stage2
+// target=spirv64-vulkan
+//
+// :9:13: error: value with non-mergable pointer type '*i32' depends on runtime control flow
+// :9:17: note: runtime control flow here
+// :9:13: note: pointers with address space 'generic' cannot be returned from a branch on target spirv-vulkan by compiler backend stage2_spirv64