https://github.com/yronglin updated https://github.com/llvm/llvm-project/pull/201763
>From 1cf3e8c5585822087a38f79d455c96ddf1227afc Mon Sep 17 00:00:00 2001 From: yronglin <[email protected]> Date: Thu, 4 Jun 2026 23:29:41 -0700 Subject: [PATCH 1/3] [clang][Lex] Don't parsing header name as a string literal Signed-off-by: yronglin <[email protected]> --- clang/lib/Lex/Lexer.cpp | 21 ++++++++++++++++++++- clang/test/CXX/lex/lex.header/p2.cpp | 5 +++++ 2 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 clang/test/CXX/lex/lex.header/p2.cpp diff --git a/clang/lib/Lex/Lexer.cpp b/clang/lib/Lex/Lexer.cpp index 2797212c229f5..40a1e6811b069 100644 --- a/clang/lib/Lex/Lexer.cpp +++ b/clang/lib/Lex/Lexer.cpp @@ -2279,9 +2279,28 @@ bool Lexer::LexStringLiteral(Token &Result, const char *CurPtr, while (C != '"') { // Skip escaped characters. Escaped newlines will already be processed by // getAndAdvanceChar. - if (C == '\\') + if (C == '\\') { + const char *SavedCurPtr = CurPtr; C = getAndAdvanceChar(CurPtr, Result); + // lex.header + // + // header-name: + // ... + // " q-char-sequence " + // ... + // q-char-sequence: + // q-char q-char-sequence[opt] + // q-char: + // any member of the translation character set except new-line and U+0022 quotation mark + // + // The implementation-defined semantics cannot be taken as causing '\' to + // "escape" the following " because there is no provision for " in a + // q-char-sequence. + if (ParsingFilename && C == '"') + CurPtr = SavedCurPtr; + } + if (C == '\n' || C == '\r' || // Newline. (C == 0 && CurPtr-1 == BufferEnd)) { // End of file. if (!isLexingRawMode() && !LangOpts.AsmPreprocessor) diff --git a/clang/test/CXX/lex/lex.header/p2.cpp b/clang/test/CXX/lex/lex.header/p2.cpp new file mode 100644 index 0000000000000..76132e610b3ac --- /dev/null +++ b/clang/test/CXX/lex/lex.header/p2.cpp @@ -0,0 +1,5 @@ +// RUN: %clang_cc1 -fsyntax-only -std=c++11 -verify %s +// expected-no-diagnostics + +#if __has_include("\") +#endif >From 551320fdb51154a79b3114d7109e06af4dc81446 Mon Sep 17 00:00:00 2001 From: yronglin <[email protected]> Date: Thu, 4 Jun 2026 23:36:53 -0700 Subject: [PATCH 2/3] Add release notes Signed-off-by: yronglin <[email protected]> --- clang/docs/ReleaseNotes.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index 77f801e6f7d67..172fcfde8fcf5 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -666,6 +666,7 @@ Bug Fixes in This Version - Fixed a crash when ``#embed`` is used with C++ modules (#GH195350) - Fixed an issue where ``__typeof_unqual`` and ``__typeof_unqual__`` were rejected as a declaration specifier in block scope in C++. - Fixed crash when checking for overflow for unary operator that can't overflow (#GH170072) +- Clang now don't handling `" q-char-sequence "` header name as a string literal (#GH132643). Bug Fixes to Compiler Builtins ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >From 0a9327ef7f1685767e8ae124f2ee569071827995 Mon Sep 17 00:00:00 2001 From: yronglin <[email protected]> Date: Thu, 4 Jun 2026 23:38:28 -0700 Subject: [PATCH 3/3] Format Signed-off-by: yronglin <[email protected]> --- clang/lib/Lex/Lexer.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/clang/lib/Lex/Lexer.cpp b/clang/lib/Lex/Lexer.cpp index 40a1e6811b069..f52b84a42ca70 100644 --- a/clang/lib/Lex/Lexer.cpp +++ b/clang/lib/Lex/Lexer.cpp @@ -2284,7 +2284,7 @@ bool Lexer::LexStringLiteral(Token &Result, const char *CurPtr, C = getAndAdvanceChar(CurPtr, Result); // lex.header - // + // // header-name: // ... // " q-char-sequence " @@ -2292,7 +2292,8 @@ bool Lexer::LexStringLiteral(Token &Result, const char *CurPtr, // q-char-sequence: // q-char q-char-sequence[opt] // q-char: - // any member of the translation character set except new-line and U+0022 quotation mark + // any member of the translation character set except new-line and + // U+0022 quotation mark // // The implementation-defined semantics cannot be taken as causing '\' to // "escape" the following " because there is no provision for " in a _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
