diff options
| author | Evan Haas <evan@lagerdata.com> | 2021-08-02 22:44:20 -0700 |
|---|---|---|
| committer | Veikka Tuominen <git@vexu.eu> | 2021-08-06 09:10:50 +0300 |
| commit | 9fd3aeb8088cd9a3b0744d5f508ca256a2bbf19f (patch) | |
| tree | 69422585eaf58ac2f4f1e7fcf30a4aab4b16f3eb /src | |
| parent | fdd97244fda948e0033034aba8042c8fdfb5d484 (diff) | |
| download | zig-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.zig | 21 |
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 { |
