From c6a7682f0466df21b5890d2ef0ee1393675d2dec Mon Sep 17 00:00:00 2001 From: Patrick Martin Date: Sun, 28 Sep 2025 16:30:16 -0400 Subject: [PATCH] translate-c: demote structs with opaque fields to opaque --- lib/compiler/translate-c/Translator.zig | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/lib/compiler/translate-c/Translator.zig b/lib/compiler/translate-c/Translator.zig index b630584eb308..abf289fe074f 100644 --- a/lib/compiler/translate-c/Translator.zig +++ b/lib/compiler/translate-c/Translator.zig @@ -527,6 +527,13 @@ fn transRecordDecl(t: *Translator, scope: *Scope, record_qt: QualType) Error!voi break :init ZigTag.opaque_literal.init(); } + // Demote record to opaque if it contains an opaque field + if (t.typeWasDemotedToOpaque(field.qt)) { + try t.opaque_demotes.put(t.gpa, base.qt, {}); + try t.warn(scope, field_loc, "{s} demoted to opaque type - has opaque field", .{container_kind_name}); + break :init ZigTag.opaque_literal.init(); + } + var field_name = field.name.lookup(t.comp); if (field.name_tok == 0) { field_name = try std.fmt.allocPrint(t.arena, "unnamed_{d}", .{unnamed_field_count});