aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Voetter <robin@voetter.nl>2023-10-08 02:06:47 +0200
committerRobin Voetter <robin@voetter.nl>2023-10-15 14:00:03 +0200
commitae3efab2260ce84fa25dd874e0c193d919eb80c1 (patch)
tree313f4bd67682c7820c22f158b8ac8a493d7776ca
parentfe51ff9fc14c38337c559acb7647480188b1d154 (diff)
downloadzig-ae3efab2260ce84fa25dd874e0c193d919eb80c1.tar.gz
zig-ae3efab2260ce84fa25dd874e0c193d919eb80c1.zip
spirv: generate *void as pointer to opaque
-rw-r--r--src/codegen/spirv.zig20
-rw-r--r--test/behavior/cast.zig2
2 files changed, 14 insertions, 8 deletions
diff --git a/src/codegen/spirv.zig b/src/codegen/spirv.zig
index 0ab87b4df0..86232c6149 100644
--- a/src/codegen/spirv.zig
+++ b/src/codegen/spirv.zig
@@ -1187,7 +1187,17 @@ const DeclGen = struct {
log.debug("resolveType: ty = {}", .{ty.fmt(mod)});
const target = self.getTarget();
switch (ty.zigTypeTag(mod)) {
- .Void, .NoReturn => return try self.spv.resolve(.void_type),
+ .NoReturn => {
+ assert(repr == .direct);
+ return try self.spv.resolve(.void_type);
+ },
+ .Void => switch (repr) {
+ .direct => return try self.spv.resolve(.void_type),
+ // Pointers to void
+ .indirect => return try self.spv.resolve(.{ .opaque_type = .{
+ .name = try self.spv.resolveString("void"),
+ } }),
+ },
.Bool => switch (repr) {
.direct => return try self.spv.resolve(.bool_type),
.indirect => return try self.intType(.unsigned, 1),
@@ -1439,11 +1449,9 @@ const DeclGen = struct {
return ty_ref;
},
.Opaque => {
- return try self.spv.resolve(.{
- .opaque_type = .{
- .name = .none, // TODO
- },
- });
+ return try self.spv.resolve(.{ .opaque_type = .{
+ .name = .none, // TODO
+ } });
},
.Null,
diff --git a/test/behavior/cast.zig b/test/behavior/cast.zig
index ec198c3133..388d6f4750 100644
--- a/test/behavior/cast.zig
+++ b/test/behavior/cast.zig
@@ -270,8 +270,6 @@ test "implicit cast from *[N]T to [*c]T" {
}
test "*usize to *void" {
- if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
-
var i = @as(usize, 0);
var v = @as(*void, @ptrCast(&i));
v.* = {};