authorgravatar for daniele.cocca@gmail.comDaniele Cocca <daniele.cocca@gmail.com> 2022-04-28 22:59:16+01:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-04-28 23:41:42-04:00
logfda143d5d81da852af73386a2100e18784bd0d3c
tree08172cdac8852038b9c5dd4aaf180b627a125c24
parent2409041e627012baa770acfd21c407ef9ba46777

CBE: fix renderValue() for struct fields with no runtime bits

These shouldn't count towards the total emitted, or the stray comma separators would cause compilation errors.

2 files changed, 4 insertions(+), 3 deletions(-)

src/codegen/c.zig+4-2
......@@ -821,12 +821,14 @@ pub const DeclGen = struct {
821821 try dg.renderTypecast(writer, ty);
822822 try writer.writeAll("){");
823823
824 for (field_vals) |field_val, i| {
825 const field_ty = ty.structFieldType(i);
824 var i: usize = 0;
825 for (field_vals) |field_val, field_index| {
826 const field_ty = ty.structFieldType(field_index);
826827 if (!field_ty.hasRuntimeBits()) continue;
827828
828829 if (i != 0) try writer.writeAll(",");
829830 try dg.renderValue(writer, field_ty, field_val, location);
831 i += 1;
830832 }
831833
832834 try writer.writeAll("}");
test/behavior/struct.zig-1
......@@ -299,7 +299,6 @@ test "struct point to self" {
299299
300300test "void struct fields" {
301301 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
302 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
303302 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
304303
305304 const foo = VoidStructFieldsFoo{