aboutsummaryrefslogtreecommitdiff
path: root/src/codegen
diff options
context:
space:
mode:
authorJacob Young <jacobly0@users.noreply.github.com>2022-11-15 23:19:22 -0500
committerJacob Young <jacobly0@users.noreply.github.com>2022-11-15 23:33:48 -0500
commita9c005e0e48cb88467b97dcdc9a25dbf7a5a5b4b (patch)
treef2431c3eeec647e791c70342c6bc40af6d907529 /src/codegen
parentb82aec5a15acd3d10f2efbde52a0bfb9af411891 (diff)
downloadzig-a9c005e0e48cb88467b97dcdc9a25dbf7a5a5b4b.tar.gz
zig-a9c005e0e48cb88467b97dcdc9a25dbf7a5a5b4b.zip
cbe: fixed tagged union initializers of a zero-bit field type
Fixes missing braces warnings on gcc 11.3.0.
Diffstat (limited to 'src/codegen')
-rw-r--r--src/codegen/c.zig8
1 files changed, 7 insertions, 1 deletions
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('}');
},