authorgravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2020-04-10 21:31:32+03:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2020-04-10 21:31:32+03:00
log1b1cbd93587642ea281dadc6f8b5e33104f38320
tree7cf7654ebd2232de15b60f059f128705e056feae
parent732c0cb58c842279404a8b1acad0f18b6650ea66
parentdf14578c9d3c7f455c7710ecc9bafe56eb0ec826
signaturebadge-question-mark Signed by PGP key 4AEE18F83AFDEB23

Merge pull request #4973 from SuperAuguste/nameless-fields

Nameless fields

2 files changed, 47 insertions(+), 2 deletions(-)

src-self-hosted/translate_c.zig+1-1
......@@ -811,7 +811,7 @@ fn transRecordDecl(c: *Context, record_decl: *const ZigClangRecordDecl) Error!?*
811811
812812 var is_anon = false;
813813 var raw_name = try c.str(ZigClangNamedDecl_getName_bytes_begin(@ptrCast(*const ZigClangNamedDecl, field_decl)));
814 if (ZigClangFieldDecl_isAnonymousStructOrUnion(field_decl)) {
814 if (ZigClangFieldDecl_isAnonymousStructOrUnion(field_decl) or raw_name.len == 0) {
815815 raw_name = try std.fmt.allocPrint(c.a(), "unnamed_{}", .{c.getMangle()});
816816 is_anon = true;
817817 }
test/translate_c.zig+46-1
......@@ -2879,7 +2879,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
28792879 , &[_][]const u8{
28802880 \\pub const FOO = 0x61626364;
28812881 });
2882
2882
28832883 cases.add("Make sure casts are grouped",
28842884 \\typedef struct
28852885 \\{
......@@ -2910,4 +2910,49 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
29102910 ,
29112911 \\pub const GPIO_2_MEM_MAP = @intToPtr([*c]c_uint, 0x8008);
29122912 });
2913
2914 if (std.Target.current.abi == .msvc) {
2915 cases.add("nameless struct fields",
2916 \\typedef struct NAMED
2917 \\{
2918 \\ long name;
2919 \\} NAMED;
2920 \\
2921 \\typedef struct ONENAMEWITHSTRUCT
2922 \\{
2923 \\ NAMED;
2924 \\ long b;
2925 \\} ONENAMEWITHSTRUCT;
2926 , &[_][]const u8{
2927 \\pub const struct_NAMED = extern struct {
2928 \\ name: c_long,
2929 \\};
2930 \\pub const NAMED = struct_NAMED;
2931 \\pub const struct_ONENAMEWITHSTRUCT = extern struct {
2932 \\ unnamed_1: struct_NAMED,
2933 \\ b: c_long,
2934 \\};
2935 });
2936 } else {
2937 cases.add("nameless struct fields",
2938 \\typedef struct NAMED
2939 \\{
2940 \\ long name;
2941 \\} NAMED;
2942 \\
2943 \\typedef struct ONENAMEWITHSTRUCT
2944 \\{
2945 \\ NAMED;
2946 \\ long b;
2947 \\} ONENAMEWITHSTRUCT;
2948 , &[_][]const u8{
2949 \\pub const struct_NAMED = extern struct {
2950 \\ name: c_long,
2951 \\};
2952 \\pub const NAMED = struct_NAMED;
2953 \\pub const struct_ONENAMEWITHSTRUCT = extern struct {
2954 \\ b: c_long,
2955 \\};
2956 });
2957 }
29132958}