more fixes

This commit is contained in:
SuperAuguste 2020-04-07 15:08:46 -04:00
parent f21ac0220a
commit 882aa86843
2 changed files with 25 additions and 1 deletions

View File

@ -811,7 +811,7 @@ fn transRecordDecl(c: *Context, record_decl: *const ZigClangRecordDecl) Error!?*
var is_anon = false; var is_anon = false;
var raw_name = try c.str(ZigClangNamedDecl_getName_bytes_begin(@ptrCast(*const ZigClangNamedDecl, field_decl))); var raw_name = try c.str(ZigClangNamedDecl_getName_bytes_begin(@ptrCast(*const ZigClangNamedDecl, field_decl)));
if (ZigClangFieldDecl_isAnonymousStructOrUnion(field_decl) or (std.Target.current.abi == .msvc and raw_name.len == 0)) { if (ZigClangFieldDecl_isAnonymousStructOrUnion(field_decl) or raw_name.len == 0) {
raw_name = try std.fmt.allocPrint(c.a(), "unnamed_{}", .{c.getMangle()}); raw_name = try std.fmt.allocPrint(c.a(), "unnamed_{}", .{c.getMangle()});
is_anon = true; is_anon = true;
} }

View File

@ -2853,4 +2853,28 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
, &[_][]const u8{ , &[_][]const u8{
\\pub const FOO = 0x61626364; \\pub const FOO = 0x61626364;
}); });
if (std.Target.current.abi == .msvc) {
cases.add("nameless struct fields on msvc",
\\typedef struct NAMED
\\{
\\ long name;
\\} NAMED;
\\
\\typedef struct ONENAMEWITHSTRUCT
\\{
\\ NAMED;
\\ long b;
\\} ONENAMEWITHSTRUCT;
, &[_][]const u8{
\\pub const struct_NAMED = extern struct {
\\ name: c_long,
\\};
\\pub const NAMED = struct_NAMED;
\\pub const struct_ONENAMEWITHSTRUCT = extern struct {
\\ unnamed_1: struct_NAMED,
\\ b: c_long,
\\};
});
}
} }