diff --git a/src/translate_c.zig b/src/translate_c.zig index d43ec7bcb101f3eb18a6ac71a8c41bd2df560773..4682726913515e15cbb5a6344af5155b77e8c0cd 100644 --- a/src/translate_c.zig +++ b/src/translate_c.zig @@ -1931,7 +1931,8 @@ fn finishBoolExpr( }, .Enum => { // node != 0 - return Tag.not_equal.create(c.arena, .{ .lhs = node, .rhs = Tag.zero_literal.init() }); + const int_val = try Tag.enum_to_int.create(c.arena, node); + return Tag.not_equal.create(c.arena, .{ .lhs = int_val, .rhs = Tag.zero_literal.init() }); }, .Elaborated => { const elaborated_ty = @ptrCast(*const clang.ElaboratedType, ty); diff --git a/test/run_translated_c.zig b/test/run_translated_c.zig index aa71a866880f1e1013ead056250c320d6f080427..b846cb00cafd84941f6dacf3fbdacd8e7df6cbe4 100644 --- a/test/run_translated_c.zig +++ b/test/run_translated_c.zig @@ -1508,4 +1508,15 @@ pub fn addCases(cases: *tests.RunTranslatedCContext) void { \\ return 0; \\} , ""); + + cases.add("enum used as boolean expression", + \\#include + \\enum FOO {BAR, BAZ}; + \\int main(void) { + \\ enum FOO x = BAR; + \\ if (x) abort(); + \\ if (!BAZ) abort(); + \\ return 0; + \\} + , ""); } diff --git a/test/translate_c.zig b/test/translate_c.zig index 09db156d5f85500bb2fc66e9ed5270ad6cd30612..fe0624872b8d58dacd7b9e5bcadedae8efc08711 100644 --- a/test/translate_c.zig +++ b/test/translate_c.zig @@ -2668,7 +2668,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { \\ if (a != 0) return 0; \\ if (b != 0) return 1; \\ if (c != null) return 2; - \\ if (d != 0) return 3; + \\ if (@enumToInt(d) != 0) return 3; \\ return 4; \\} });