zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit fa6546ba743fe145ad65d9ca76fe9e9e01d05056 (tree)
parent fc8791c133c14fe969b9056d8f0e337094ce1461
Author: Evan Haas <evan@lagerdata.com>
Date:   Sun,  6 Jun 2021 17:33:57 -0700

translate-c: properly handle enums used as boolean expressions

Diffstat:
Msrc/translate_c.zig | 3++-
Mtest/run_translated_c.zig | 11+++++++++++
Mtest/translate_c.zig | 2+-
3 files changed, 14 insertions(+), 2 deletions(-)

diff --git 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 @@ -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; + \\} + , ""); } diff --git 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; \\} });