diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/behavior/translate_c_macros.h | 1 | ||||
| -rw-r--r-- | test/behavior/translate_c_macros.zig | 20 |
2 files changed, 21 insertions, 0 deletions
diff --git a/test/behavior/translate_c_macros.h b/test/behavior/translate_c_macros.h index 490ca35726..547194d35a 100644 --- a/test/behavior/translate_c_macros.h +++ b/test/behavior/translate_c_macros.h @@ -37,5 +37,6 @@ union U { #define IGNORE_ME_10(x) (volatile const void)(x) #define UNION_CAST(X) (union U)(X) +#define CAST_OR_CALL_WITH_PARENS(type_or_fn, val) ((type_or_fn)(val)) #define NESTED_COMMA_OPERATOR (1, (2, 3)) diff --git a/test/behavior/translate_c_macros.zig b/test/behavior/translate_c_macros.zig index e44996b990..96676b5b78 100644 --- a/test/behavior/translate_c_macros.zig +++ b/test/behavior/translate_c_macros.zig @@ -70,6 +70,26 @@ test "casting to union with a macro" { try expect(d == casted.d); } +test "casting or calling a value with a paren-surrounded macro" { + if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO + + const l: c_long = 42; + const casted = h.CAST_OR_CALL_WITH_PARENS(c_int, l); + try expect(casted == @intCast(c_int, l)); + + const Helper = struct { + fn foo(n: c_int) !void { + try expect(n == 42); + } + }; + + try h.CAST_OR_CALL_WITH_PARENS(Helper.foo, 42); +} + test "nested comma operator" { if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
