diff options
| author | Robin Voetter <robin@voetter.nl> | 2023-09-22 19:22:44 +0200 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2023-09-23 12:36:56 -0700 |
| commit | cff8ab88f5ffe24771aa9c6e839eef03bc22f3d2 (patch) | |
| tree | 1c6ef32977a615238c231c79c020c16a8b98da5d /src/codegen | |
| parent | 572517376a7695693c59a0ec4ec6cc5442003e3a (diff) | |
| download | zig-cff8ab88f5ffe24771aa9c6e839eef03bc22f3d2.tar.gz zig-cff8ab88f5ffe24771aa9c6e839eef03bc22f3d2.zip | |
spirv: fixes
Diffstat (limited to 'src/codegen')
| -rw-r--r-- | src/codegen/spirv.zig | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/src/codegen/spirv.zig b/src/codegen/spirv.zig index 97574961bc..016604e1f6 100644 --- a/src/codegen/spirv.zig +++ b/src/codegen/spirv.zig @@ -771,21 +771,25 @@ pub const DeclGen = struct { return try self.constructArray(result_ty_ref, constituents); }, .struct_type => { - const struct_ty = mod.typeToStruct(ty).?; - if (struct_ty.layout == .Packed) { + const struct_type = mod.typeToStruct(ty).?; + if (struct_type.layout == .Packed) { return self.todo("packed struct constants", .{}); } var constituents = std.ArrayList(IdRef).init(self.gpa); defer constituents.deinit(); - var field_it = struct_ty.runtimeFieldIterator(mod); - while (field_it.next()) |field_and_index| { - const field = field_and_index.field; - const index = field_and_index.index; + var it = struct_type.iterateRuntimeOrder(ip); + while (it.next()) |field_index| { + const field_ty = struct_type.field_types.get(ip)[field_index].toType(); + if (!field_ty.hasRuntimeBitsIgnoreComptime(mod)) { + // This is a zero-bit field - we only needed it for the alignment. + continue; + } + // TODO: Padding? - const field_val = try val.fieldValue(mod, index); - const field_id = try self.constant(field.ty, field_val, .indirect); + const field_val = try val.fieldValue(mod, field_index); + const field_id = try self.constant(field_ty, field_val, .indirect); try constituents.append(field_id); } |
