Commit fa6546ba74
Changed files (3)
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);
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 <stdlib.h>
+ \\enum FOO {BAR, BAZ};
+ \\int main(void) {
+ \\ enum FOO x = BAR;
+ \\ if (x) abort();
+ \\ if (!BAZ) abort();
+ \\ return 0;
+ \\}
+ , "");
}
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;
\\}
});