Commit 3aba1fa04f

Veikka Tuominen <git@vexu.eu>
2021-02-19 00:52:27
translate-c: ensure failed macros don't get defined multiple times
1 parent df5a812
Changed files (2)
src/translate_c.zig
@@ -4025,7 +4025,7 @@ pub fn failDecl(c: *Context, loc: clang.SourceLocation, name: []const u8, compti
     // location
     // pub const name = @compileError(msg);
     const fail_msg = try std.fmt.allocPrint(c.arena, format, args);
-    try c.global_scope.nodes.append(try Tag.fail_decl.create(c.arena, .{ .actual = name, .mangled = fail_msg }));
+    try addTopLevelDecl(c, name, try Tag.fail_decl.create(c.arena, .{ .actual = name, .mangled = fail_msg }));
     const location_comment = try std.fmt.allocPrint(c.arena, "// {s}", .{c.locStr(loc)});
     try c.global_scope.nodes.append(try Tag.warning.create(c.arena, location_comment));
 }
test/run_translated_c.zig
@@ -3,6 +3,12 @@ const tests = @import("tests.zig");
 const nl = std.cstr.line_sep;
 
 pub fn addCases(cases: *tests.RunTranslatedCContext) void {
+    cases.add("failed macros are only declared once",
+        \\#define FOO =
+        \\#define FOO =
+        \\int main(void) {}
+    , "");
+
     cases.add("parenthesized string literal",
         \\void foo(const char *s) {}
         \\int main(void) {