authorgravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2020-09-09 16:29:16+03:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2020-09-09 16:29:16+03:00
log749417a1f3060f0695bbfe72d929f06b0be42535
tree70c8e839dd040027fc179373cfe8098cc1388125
parent7d487a41627658bfda37f1f06f8e453c2b576b9c
signaturelock-open Commit is signed but in an unrecognized format.

translate-c: check for builtin typedef macro identifiers

Closes #6292

2 files changed, 4 insertions(+), 1 deletions(-)

src-self-hosted/translate_c.zig+1-1
......@@ -5881,7 +5881,7 @@ fn parseCPrimaryExpr(c: *Context, m: *MacroCtx, scope: *Scope) ParseError!*ast.N
58815881 },
58825882 .Identifier => {
58835883 const mangled_name = scope.getAlias(slice);
5884 return transCreateNodeIdentifier(c, mangled_name);
5884 return transCreateNodeIdentifier(c, checkForBuiltinTypedef(mangled_name) orelse mangled_name);
58855885 },
58865886 .LParen => {
58875887 const inner_node = try parseCExpr(c, m, scope);
test/translate_c.zig+3
......@@ -2761,12 +2761,15 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
27612761 cases.add("macro cast",
27622762 \\#define FOO(bar) baz((void *)(baz))
27632763 \\#define BAR (void*) a
2764 \\#define BAZ (uint32_t)(2)
27642765 , &[_][]const u8{
27652766 \\pub inline fn FOO(bar: anytype) @TypeOf(baz((@import("std").meta.cast(?*c_void, baz)))) {
27662767 \\ return baz((@import("std").meta.cast(?*c_void, baz)));
27672768 \\}
27682769 ,
27692770 \\pub const BAR = (@import("std").meta.cast(?*c_void, a));
2771 ,
2772 \\pub const BAZ = (@import("std").meta.cast(u32, 2));
27702773 });
27712774
27722775 cases.add("macro with cast to unsigned short, long, and long long",