Commit 3d1652070a

travisstaloch <1562827+travisstaloch@users.noreply.github.com>
2024-04-11 16:39:47
translate-c: support macro with 'assert(false && "error message")'
closes #14642 with modified fix suggested by Vexu in https://github.com/ziglang/zig/issues/14642#issuecomment-1775476042
1 parent f7a76bd
Changed files (2)
src
test
cases
src/translate_c.zig
@@ -5793,6 +5793,10 @@ fn macroIntToBool(c: *Context, node: Node) !Node {
     if (isBoolRes(node)) {
         return node;
     }
+    if (node.tag() == .string_literal) {
+        const int_from_ptr = try Tag.int_from_ptr.create(c.arena, node);
+        return Tag.not_equal.create(c.arena, .{ .lhs = int_from_ptr, .rhs = Tag.zero_literal.init() });
+    }
 
     return Tag.not_equal.create(c.arena, .{ .lhs = node, .rhs = Tag.zero_literal.init() });
 }
test/cases/translate_c/assert_with_strlit.c
@@ -0,0 +1,8 @@
+
+void assert(int x) {}
+#define FOO assert(0 && "error message")
+
+// translate-c
+// c_frontend=clang
+//
+// pub const FOO = assert((@as(c_int, 0) != 0) and (@intFromPtr("error message") != 0));