From a9c005e0e48cb88467b97dcdc9a25dbf7a5a5b4b Mon Sep 17 00:00:00 2001 From: Jacob Young Date: Tue, 15 Nov 2022 23:19:22 -0500 Subject: cbe: fixed tagged union initializers of a zero-bit field type Fixes missing braces warnings on gcc 11.3.0. --- src/codegen/c.zig | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'src/codegen') diff --git a/src/codegen/c.zig b/src/codegen/c.zig index 9b74a48a1a..e7dadf6df2 100644 --- a/src/codegen/c.zig +++ b/src/codegen/c.zig @@ -1140,10 +1140,16 @@ pub const DeclGen = struct { const index = ty.unionTagFieldIndex(union_obj.tag, dg.module).?; const field_ty = ty.unionFields().values()[index].ty; const field_name = ty.unionFields().keys()[index]; + var it = ty.unionFields().iterator(); if (field_ty.hasRuntimeBits()) { try writer.print(".{ } = ", .{fmtIdent(field_name)}); try dg.renderValue(writer, field_ty, union_obj.val, .Initializer); - } else try writer.writeByte('0'); + } else while (it.next()) |field| { + if (!field.value_ptr.ty.hasRuntimeBits()) continue; + try writer.print(".{ } = ", .{fmtIdent(field.key_ptr.*)}); + try dg.renderValue(writer, field.value_ptr.ty, Value.undef, .Initializer); + break; + } else try writer.writeAll(".empty_union = 0"); if (ty.unionTagTypeSafety()) |_| try writer.writeByte('}'); try writer.writeByte('}'); }, -- cgit v1.2.3