Skip to content

Commit 6450736

Browse files
committed
translate-c default enum tag type to c_int
1 parent cb257b4 commit 6450736

File tree

2 files changed

+13
-10
lines changed

2 files changed

+13
-10
lines changed

src-self-hosted/translate_c.zig

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -875,9 +875,12 @@ fn transEnumDecl(c: *Context, enum_decl: *const ZigClangEnumDecl) Error!?*ast.No
875875
// types, while that's not ISO-C compliant many compilers allow this and
876876
// default to the usual integer type used for all the enums.
877877

878+
// default to c_int since msvc and gcc default to different types
878879
_ = try appendToken(c, .LParen, "(");
879880
container_node.init_arg_expr = .{
880-
.Type = if (int_type.ptr != null)
881+
.Type = if (int_type.ptr != null and
882+
!isCBuiltinType(int_type, .UInt) and
883+
!isCBuiltinType(int_type, .Int))
881884
transQualType(rp, int_type, enum_loc) catch |err| switch (err) {
882885
error.UnsupportedType => {
883886
try failDecl(c, enum_loc, name, "unable to translate enum tag type", .{});

test/translate_c.zig

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1104,7 +1104,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
11041104
\\pub const a = @enumToInt(enum_unnamed_1.a);
11051105
\\pub const b = @enumToInt(enum_unnamed_1.b);
11061106
\\pub const c = @enumToInt(enum_unnamed_1.c);
1107-
\\const enum_unnamed_1 = extern enum(c_uint) {
1107+
\\const enum_unnamed_1 = extern enum(c_int) {
11081108
\\ a,
11091109
\\ b,
11101110
\\ c,
@@ -1114,7 +1114,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
11141114
\\pub const e = @enumToInt(enum_unnamed_2.e);
11151115
\\pub const f = @enumToInt(enum_unnamed_2.f);
11161116
\\pub const g = @enumToInt(enum_unnamed_2.g);
1117-
\\const enum_unnamed_2 = extern enum(c_uint) {
1117+
\\const enum_unnamed_2 = extern enum(c_int) {
11181118
\\ e = 0,
11191119
\\ f = 4,
11201120
\\ g = 5,
@@ -1124,7 +1124,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
11241124
\\pub const i = @enumToInt(enum_unnamed_3.i);
11251125
\\pub const j = @enumToInt(enum_unnamed_3.j);
11261126
\\pub const k = @enumToInt(enum_unnamed_3.k);
1127-
\\const enum_unnamed_3 = extern enum(c_uint) {
1127+
\\const enum_unnamed_3 = extern enum(c_int) {
11281128
\\ i,
11291129
\\ j,
11301130
\\ k,
@@ -1137,7 +1137,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
11371137
\\pub const n = @enumToInt(enum_i.n);
11381138
\\pub const o = @enumToInt(enum_i.o);
11391139
\\pub const p = @enumToInt(enum_i.p);
1140-
\\pub const enum_i = extern enum(c_uint) {
1140+
\\pub const enum_i = extern enum(c_int) {
11411141
\\ n,
11421142
\\ o,
11431143
\\ p,
@@ -1569,7 +1569,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
15691569
, &[_][]const u8{
15701570
\\pub const One = @enumToInt(enum_unnamed_1.One);
15711571
\\pub const Two = @enumToInt(enum_unnamed_1.Two);
1572-
\\const enum_unnamed_1 = extern enum(c_uint) {
1572+
\\const enum_unnamed_1 = extern enum(c_int) {
15731573
\\ One,
15741574
\\ Two,
15751575
\\ _,
@@ -1672,7 +1672,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
16721672
\\ return ((((((((((e + f) + g) + h) + i) + j) + k) + l) + m) + o) + p);
16731673
\\}
16741674
, &[_][]const u8{
1675-
\\pub const enum_Foo = extern enum(c_uint) {
1675+
\\pub const enum_Foo = extern enum(c_int) {
16761676
\\ A,
16771677
\\ B,
16781678
\\ C,
@@ -1718,7 +1718,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
17181718
\\ y: c_int,
17191719
\\};
17201720
,
1721-
\\pub const enum_Bar = extern enum(c_uint) {
1721+
\\pub const enum_Bar = extern enum(c_int) {
17221722
\\ A,
17231723
\\ B,
17241724
\\ _,
@@ -1982,7 +1982,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
19821982
\\ return 4;
19831983
\\}
19841984
, &[_][]const u8{
1985-
\\pub const enum_SomeEnum = extern enum(c_uint) {
1985+
\\pub const enum_SomeEnum = extern enum(c_int) {
19861986
\\ A,
19871987
\\ B,
19881988
\\ C,
@@ -2424,7 +2424,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
24242424
\\pub const FooA = @enumToInt(enum_Foo.A);
24252425
\\pub const FooB = @enumToInt(enum_Foo.B);
24262426
\\pub const Foo1 = @enumToInt(enum_Foo.@"1");
2427-
\\pub const enum_Foo = extern enum(c_uint) {
2427+
\\pub const enum_Foo = extern enum(c_int) {
24282428
\\ A = 2,
24292429
\\ B = 5,
24302430
\\ @"1" = 6,

0 commit comments

Comments
 (0)