Commit d0e7a3596b
src/codegen/spirv.zig
@@ -1219,7 +1219,14 @@ const DeclGen = struct {
},
.Int => {
const int_info = ty.intInfo(mod);
- // TODO: Integers in OpenCL kernels are always unsigned.
+ if (int_info.bits == 0) {
+ // Some times, the backend will be asked to generate a pointer to i0. OpTypeInt
+ // with 0 bits is invalid, so return an opaque type in this case.
+ assert(repr == .indirect);
+ return try self.spv.resolve(.{ .opaque_type = .{
+ .name = try self.spv.resolveString("u0"),
+ } });
+ }
return try self.intType(int_info.signedness, int_info.bits);
},
.Enum => {
test/behavior/array.zig
@@ -261,7 +261,6 @@ fn doSomeMangling(array: *[4]u8) void {
test "implicit cast zero sized array ptr to slice" {
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
- if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
{
var b = "".*;
@@ -732,7 +731,6 @@ test "slicing array of zero-sized values" {
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest;
- if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
var arr: [32]u0 = undefined;
for (arr[0..]) |*zero|