diff options
| author | Robin Voetter <robin@voetter.nl> | 2024-10-27 16:31:45 +0100 |
|---|---|---|
| committer | Robin Voetter <robin@voetter.nl> | 2024-10-27 16:31:45 +0100 |
| commit | 49a067ccfe6cc3ee59b0fe0f2dc32f80ab75d574 (patch) | |
| tree | 349a61aee17121afb7a63e37c6ce4c49073ab8cb /test/cases/compile_errors/spirv_merge_logical_pointers.zig | |
| parent | 39013619b943956f0c26422a01f026d845dc96a9 (diff) | |
| download | zig-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.zig | 19 |
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 |
