aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEvan Haas <evan@lagerdata.com>2021-08-02 22:44:20 -0700
committerVeikka Tuominen <git@vexu.eu>2021-08-06 09:10:50 +0300
commit9fd3aeb8088cd9a3b0744d5f508ca256a2bbf19f (patch)
tree69422585eaf58ac2f4f1e7fcf30a4aab4b16f3eb /src
parentfdd97244fda948e0033034aba8042c8fdfb5d484 (diff)
downloadzig-9fd3aeb8088cd9a3b0744d5f508ca256a2bbf19f.tar.gz
zig-9fd3aeb8088cd9a3b0744d5f508ca256a2bbf19f.zip
translate-c: handle macros that cast to cv void
Fixes #9507
Diffstat (limited to 'src')
-rw-r--r--src/translate_c.zig21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/translate_c.zig b/src/translate_c.zig
index e6d6392a9c..e11fc5b736 100644
--- a/src/translate_c.zig
+++ b/src/translate_c.zig
@@ -4978,6 +4978,17 @@ const PatternList = struct {
,
"WL_CONTAINER_OF",
},
+
+ [2][]const u8{ "IGNORE_ME(X) ((void)(X))", "DISCARD" },
+ [2][]const u8{ "IGNORE_ME(X) (void)(X)", "DISCARD" },
+ [2][]const u8{ "IGNORE_ME(X) ((const void)(X))", "DISCARD" },
+ [2][]const u8{ "IGNORE_ME(X) (const void)(X)", "DISCARD" },
+ [2][]const u8{ "IGNORE_ME(X) ((volatile void)(X))", "DISCARD" },
+ [2][]const u8{ "IGNORE_ME(X) (volatile void)(X)", "DISCARD" },
+ [2][]const u8{ "IGNORE_ME(X) ((const volatile void)(X))", "DISCARD" },
+ [2][]const u8{ "IGNORE_ME(X) (const volatile void)(X)", "DISCARD" },
+ [2][]const u8{ "IGNORE_ME(X) ((volatile const void)(X))", "DISCARD" },
+ [2][]const u8{ "IGNORE_ME(X) (volatile const void)(X)", "DISCARD" },
};
/// Assumes that `ms` represents a tokenized function-like macro.
@@ -5152,6 +5163,16 @@ test "Macro matching" {
try helper.checkMacro(allocator, pattern_list, "NO_MATCH(X, Y) (X + Y)", null);
try helper.checkMacro(allocator, pattern_list, "CAST_OR_CALL(X, Y) (X)(Y)", "CAST_OR_CALL");
+ try helper.checkMacro(allocator, pattern_list, "IGNORE_ME(X) (void)(X)", "DISCARD");
+ try helper.checkMacro(allocator, pattern_list, "IGNORE_ME(X) ((void)(X))", "DISCARD");
+ try helper.checkMacro(allocator, pattern_list, "IGNORE_ME(X) (const void)(X)", "DISCARD");
+ try helper.checkMacro(allocator, pattern_list, "IGNORE_ME(X) ((const void)(X))", "DISCARD");
+ try helper.checkMacro(allocator, pattern_list, "IGNORE_ME(X) (volatile void)(X)", "DISCARD");
+ try helper.checkMacro(allocator, pattern_list, "IGNORE_ME(X) ((volatile void)(X))", "DISCARD");
+ try helper.checkMacro(allocator, pattern_list, "IGNORE_ME(X) (const volatile void)(X)", "DISCARD");
+ try helper.checkMacro(allocator, pattern_list, "IGNORE_ME(X) ((const volatile void)(X))", "DISCARD");
+ try helper.checkMacro(allocator, pattern_list, "IGNORE_ME(X) (volatile const void)(X)", "DISCARD");
+ try helper.checkMacro(allocator, pattern_list, "IGNORE_ME(X) ((volatile const void)(X))", "DISCARD");
}
const MacroCtx = struct {