Author: Aaron Ballman Date: 2024-06-13T07:48:08-04:00 New Revision: 4f09ac7705b3b24492d521a97571404c2e9a1f8e
URL: https://github.com/llvm/llvm-project/commit/4f09ac7705b3b24492d521a97571404c2e9a1f8e DIFF: https://github.com/llvm/llvm-project/commit/4f09ac7705b3b24492d521a97571404c2e9a1f8e.diff LOG: Fix off-by-one issue found by post-commit review Added: Modified: clang/lib/Lex/Lexer.cpp clang/test/Lexer/cxx2c-raw-strings.cpp Removed: ################################################################################ diff --git a/clang/lib/Lex/Lexer.cpp b/clang/lib/Lex/Lexer.cpp index c7543a48c0b50..e59c7805b3862 100644 --- a/clang/lib/Lex/Lexer.cpp +++ b/clang/lib/Lex/Lexer.cpp @@ -2262,7 +2262,6 @@ bool Lexer::LexRawStringLiteral(Token &Result, const char *CurPtr, unsigned PrefixLen = 0; while (PrefixLen != 16 && isRawStringDelimBody(CurPtr[PrefixLen])) { - ++PrefixLen; if (!isLexingRawMode() && llvm::is_contained({'$', '@', '`'}, CurPtr[PrefixLen])) { const char *Pos = &CurPtr[PrefixLen]; @@ -2271,6 +2270,7 @@ bool Lexer::LexRawStringLiteral(Token &Result, const char *CurPtr, : diag::ext_cxx26_raw_string_literal_character_set) << StringRef(Pos, 1); } + ++PrefixLen; } // If the last character was not a '(', then we didn't lex a valid delimiter. diff --git a/clang/test/Lexer/cxx2c-raw-strings.cpp b/clang/test/Lexer/cxx2c-raw-strings.cpp index a1e971434e244..cf114e57d8bb1 100644 --- a/clang/test/Lexer/cxx2c-raw-strings.cpp +++ b/clang/test/Lexer/cxx2c-raw-strings.cpp @@ -21,4 +21,8 @@ int main() { (void) R"\()\"; // expected-error@-1 {{invalid character '\' in raw string delimiter}} // expected-error@-2 {{expected expression}} + + (void) R"@(foo)@"; + // cxx26-warning@-1 {{'@' in a raw string literal delimiter is incompatible with standards before C++2c}} + // precxx26-warning@-2 {{'@' in a raw string literal delimiter is a C++2c extension}} } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits