From 96e5ce447a6e5bf7302a5f905b1bb0a996c0502c Mon Sep 17 00:00:00 2001 From: lemon Date: Fri, 9 Jan 2026 12:31:32 +0100 Subject: cpp: fix multiline comment in skipped preprocessor directive --- c/lex.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) (limited to 'c') diff --git a/c/lex.c b/c/lex.c index e2d86c6..02e9f3d 100644 --- a/c/lex.c +++ b/c/lex.c @@ -722,8 +722,22 @@ static void ppskipline(struct lexer *lx) { while (lx->macstk) popmac(lx); - while (peek(lx, 0) != '\n' && !lx->eof) - next(lx); + for (int c; (c = peek(lx, 0)) != '\n' && !lx->eof; next(lx)) { + if (c == '/' && peek(lx, 1) == '*') { /* comment */ + next(lx), next(lx); + bool done = 0; + while (!((c = peek(lx, 0)) == '*' && peek(lx, 1) == '/')) { + if (lx->eof) { + struct span span = {{ lx->idx, lx->chridx - lx->idx, lx->fileid }}; + fatal(&span, "unterminated comment"); + } + done = c == '\n'; + next(lx); + } + next(lx); + if (done) return; + } + } } static bool -- cgit v1.2.3