From 76b0c6bb6bbc339789943ada1f79ec1eba52239f Mon Sep 17 00:00:00 2001 From: nsfisis Date: Sun, 31 Aug 2025 00:04:38 +0900 Subject: fix: #else/#endif with trailing whitespace or comment --- src/preprocess.c | 2 ++ tests/109.sh | 10 ++++++++++ 2 files changed, 12 insertions(+) create mode 100644 tests/109.sh diff --git a/src/preprocess.c b/src/preprocess.c index 6923367..c2dd3a8 100644 --- a/src/preprocess.c +++ b/src/preprocess.c @@ -1084,6 +1084,7 @@ static BOOL preprocess_elif_groups_opt(Preprocessor* pp, BOOL did_include) { // '#' 'else' group? static void preprocess_else_group(Preprocessor* pp, BOOL did_include) { skip_pp_token(pp, TokenKind_pp_directive_else); + skip_whitespaces(pp); expect_pp_token(pp, TokenKind_newline); include_conditionally(pp, GroupDelimiterKind_after_else_directive, !did_include); @@ -1093,6 +1094,7 @@ static void preprocess_else_group(Preprocessor* pp, BOOL did_include) { // '#' 'endif' new-line static void preprocess_endif_directive(Preprocessor* pp) { skip_pp_token(pp, TokenKind_pp_directive_endif); + skip_whitespaces(pp); expect_pp_token(pp, TokenKind_newline); } diff --git a/tests/109.sh b/tests/109.sh new file mode 100644 index 0000000..40b2c82 --- /dev/null +++ b/tests/109.sh @@ -0,0 +1,10 @@ +cat <<'EOF' > expected +EOF + +test_diff <<'EOF' +#if 1 // a +#else // b +#endif // c + +int main() {} +EOF -- cgit v1.2.3-70-g09d2