motiejus/zig

fork of https://codeberg.org/ziglang/zig
git clone https://git.jakstys.lt/motiejus/zig.git
Log | Tree | Refs | README | LICENSE

commit fda143d5d81da852af73386a2100e18784bd0d3c (tree)
parent 2409041e627012baa770acfd21c407ef9ba46777
Author: Daniele Cocca <daniele.cocca@gmail.com>
Date:   Thu, 28 Apr 2022 22:59:16 +0100

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.

Diffstat:
Msrc/codegen/c.zig | 6++++--
Mtest/behavior/struct.zig | 1-
2 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/src/codegen/c.zig b/src/codegen/c.zig @@ -821,12 +821,14 @@ pub const DeclGen = struct { try dg.renderTypecast(writer, ty); try writer.writeAll("){"); - for (field_vals) |field_val, i| { - const field_ty = ty.structFieldType(i); + var i: usize = 0; + for (field_vals) |field_val, field_index| { + const field_ty = ty.structFieldType(field_index); if (!field_ty.hasRuntimeBits()) continue; if (i != 0) try writer.writeAll(","); try dg.renderValue(writer, field_ty, field_val, location); + i += 1; } try writer.writeAll("}"); diff --git a/test/behavior/struct.zig b/test/behavior/struct.zig @@ -299,7 +299,6 @@ test "struct point to self" { test "void struct fields" { if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; - if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO const foo = VoidStructFieldsFoo{