| ... | @@ -788,6 +788,7 @@ fn transRecordDecl(c: *Context, record_decl: *const ZigClangRecordDecl) Error!?* | ... | @@ -788,6 +788,7 @@ fn transRecordDecl(c: *Context, record_decl: *const ZigClangRecordDecl) Error!?* |
| 788 | .rbrace_token = undefined, | 788 | .rbrace_token = undefined, |
| 789 | }; | 789 | }; |
| 790 | | 790 | |
| | 791 | var unnamed_field_count: u32 = 0; |
| 791 | var it = ZigClangRecordDecl_field_begin(record_def); | 792 | var it = ZigClangRecordDecl_field_begin(record_def); |
| 792 | const end_it = ZigClangRecordDecl_field_end(record_def); | 793 | const end_it = ZigClangRecordDecl_field_end(record_def); |
| 793 | while (ZigClangRecordDecl_field_iterator_neq(it, end_it)) : (it = ZigClangRecordDecl_field_iterator_next(it)) { | 794 | while (ZigClangRecordDecl_field_iterator_neq(it, end_it)) : (it = ZigClangRecordDecl_field_iterator_next(it)) { |
| ... | @@ -812,7 +813,9 @@ fn transRecordDecl(c: *Context, record_decl: *const ZigClangRecordDecl) Error!?* | ... | @@ -812,7 +813,9 @@ fn transRecordDecl(c: *Context, record_decl: *const ZigClangRecordDecl) Error!?* |
| 812 | var is_anon = false; | 813 | var is_anon = false; |
| 813 | var raw_name = try c.str(ZigClangNamedDecl_getName_bytes_begin(@ptrCast(*const ZigClangNamedDecl, field_decl))); | 814 | var raw_name = try c.str(ZigClangNamedDecl_getName_bytes_begin(@ptrCast(*const ZigClangNamedDecl, field_decl))); |
| 814 | if (ZigClangFieldDecl_isAnonymousStructOrUnion(field_decl) or raw_name.len == 0) { | 815 | if (ZigClangFieldDecl_isAnonymousStructOrUnion(field_decl) or raw_name.len == 0) { |
| 815 | raw_name = try std.fmt.allocPrint(c.a(), "unnamed_{}", .{c.getMangle()}); | 816 | // Context.getMangle() is not used here because doing so causes unpredictable field names for anonymous fields. |
| | 817 | raw_name = try std.fmt.allocPrint(c.a(), "unnamed_{}", .{unnamed_field_count}); |
| | 818 | unnamed_field_count += 1; |
| 816 | is_anon = true; | 819 | is_anon = true; |
| 817 | } | 820 | } |
| 818 | const field_name = try appendIdentifier(c, raw_name); | 821 | const field_name = try appendIdentifier(c, raw_name); |