From 7838acf484f7cb64b7723f2a1dd2fe00f53b77fc Mon Sep 17 00:00:00 2001 From: nsfisis Date: Fri, 23 Jan 2026 19:41:12 +0900 Subject: fix: skip removed tokens from macro arguments --- src/preprocess.c | 4 +++- tests/macro_operators.sh | 10 ++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/preprocess.c b/src/preprocess.c index 70a7d13..5ccf698 100644 --- a/src/preprocess.c +++ b/src/preprocess.c @@ -526,7 +526,9 @@ static MacroArgArray* pp_parse_macro_arguments(Preprocessor* pp, bool skip_newli } tok = next_pp_token(pp); - *tokens_push_new(&arg->tokens) = *tok; + if (tok->kind != TokenKind_removed) { + *tokens_push_new(&arg->tokens) = *tok; + } skip_whitespaces_or_newlines(pp, skip_newline); } diff --git a/tests/macro_operators.sh b/tests/macro_operators.sh index 57e8564..2954d53 100644 --- a/tests/macro_operators.sh +++ b/tests/macro_operators.sh @@ -122,3 +122,13 @@ int main() { ASSERT_EQ(12, BAZ); } EOF + +cat <<'EOF' > expected +foo +EOF + +test_cpp <<'EOF' +#define CONCAT(x, y) x ## y +#define CONCAT2(name, r) CONCAT(name, r) +CONCAT2(foo,) +EOF -- cgit v1.3-1-g0d28