aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVeikka Tuominen <git@vexu.eu>2021-02-19 01:52:27 +0200
committerVeikka Tuominen <git@vexu.eu>2021-02-19 01:52:27 +0200
commit3aba1fa04fe633f89e05a7adc4c170d400705bf9 (patch)
tree545bbca224451c55559e7bcc9a8af5a3f092e28a
parentdf5a8120df640de900667624ad8390394f99521f (diff)
downloadzig-3aba1fa04fe633f89e05a7adc4c170d400705bf9.tar.gz
zig-3aba1fa04fe633f89e05a7adc4c170d400705bf9.zip
translate-c: ensure failed macros don't get defined multiple times
-rw-r--r--src/translate_c.zig2
-rw-r--r--test/run_translated_c.zig6
2 files changed, 7 insertions, 1 deletions
diff --git a/src/translate_c.zig b/src/translate_c.zig
index 541b854da7..f29dfccfa3 100644
--- a/src/translate_c.zig
+++ b/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));
}
diff --git a/test/run_translated_c.zig b/test/run_translated_c.zig
index 04095d3b71..2db80c9c6a 100644
--- a/test/run_translated_c.zig
+++ b/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) {