diff options
| author | Robin Voetter <robin@voetter.nl> | 2023-10-08 02:06:47 +0200 |
|---|---|---|
| committer | Robin Voetter <robin@voetter.nl> | 2023-10-15 14:00:03 +0200 |
| commit | ae3efab2260ce84fa25dd874e0c193d919eb80c1 (patch) | |
| tree | 313f4bd67682c7820c22f158b8ac8a493d7776ca | |
| parent | fe51ff9fc14c38337c559acb7647480188b1d154 (diff) | |
| download | zig-ae3efab2260ce84fa25dd874e0c193d919eb80c1.tar.gz zig-ae3efab2260ce84fa25dd874e0c193d919eb80c1.zip | |
spirv: generate *void as pointer to opaque
| -rw-r--r-- | src/codegen/spirv.zig | 20 | ||||
| -rw-r--r-- | test/behavior/cast.zig | 2 |
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.* = {}; |
