diff --git a/src/translate_c.zig b/src/translate_c.zig index d43ec7bcb1..4682726913 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 aa71a86688..b846cb00ca 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 09db156d5f..fe0624872b 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; \\} });