authorgravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2020-01-16 12:50:44+02:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2020-01-16 12:50:44+02:00
log6450736c5f9039565802e1f898a8fd402ba12c63
tree4ad8e63b5427adce083836d9beaad8f4b57b264d
parentcb257b4e11768ccce93d7cf11c416fa8e745f206
signaturelock-open Commit is signed but in an unrecognized format.

translate-c default enum tag type to c_int


2 files changed, 13 insertions(+), 10 deletions(-)

src-self-hosted/translate_c.zig+4-1
......@@ -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+9-9
......@@ -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,