Author: akshaykumars614 Date: 2024-02-15T20:07:54-05:00 New Revision: cc23574184335df187275ca0e716bf79b93b75f1
URL: https://github.com/llvm/llvm-project/commit/cc23574184335df187275ca0e716bf79b93b75f1 DIFF: https://github.com/llvm/llvm-project/commit/cc23574184335df187275ca0e716bf79b93b75f1.diff LOG: bad error message on incorrect string literal #18079 (#81670) (bad error message on incorrect string literal) Fixed the error message for incorrect string literal before: ``` test.cpp:1:19: error: invalid character ' ' character in raw string delimiter; use PREFIX( )PREFIX to delimit raw string char const* a = R" ^ ``` now: ``` test.cpp:1:19: error: invalid newline character in raw string delimiter; use PREFIX( )PREFIX to delimit raw string 1 | char const* a = R" | ^ ``` --------- Co-authored-by: Jon Roelofs <jroel...@gmail.com> Added: clang/test/Lexer/raw-string-dlim-invalid.cpp Modified: clang/include/clang/Basic/DiagnosticLexKinds.td clang/lib/Lex/Lexer.cpp Removed: ################################################################################ diff --git a/clang/include/clang/Basic/DiagnosticLexKinds.td b/clang/include/clang/Basic/DiagnosticLexKinds.td index 1354543612b9fb..d7c172e6546351 100644 --- a/clang/include/clang/Basic/DiagnosticLexKinds.td +++ b/clang/include/clang/Basic/DiagnosticLexKinds.td @@ -100,7 +100,10 @@ def err_raw_delim_too_long : Error< "raw string delimiter longer than 16 characters" "; use PREFIX( )PREFIX to delimit raw string">; def err_invalid_char_raw_delim : Error< - "invalid character '%0' character in raw string delimiter" + "invalid character '%0' in raw string delimiter" + "; use PREFIX( )PREFIX to delimit raw string">; +def err_invalid_newline_raw_delim : Error< + "invalid newline character in raw string delimiter" "; use PREFIX( )PREFIX to delimit raw string">; def err_unterminated_raw_string : Error< "raw string missing terminating delimiter )%0\"">; diff --git a/clang/lib/Lex/Lexer.cpp b/clang/lib/Lex/Lexer.cpp index d927f28b47c270..c98645993abe07 100644 --- a/clang/lib/Lex/Lexer.cpp +++ b/clang/lib/Lex/Lexer.cpp @@ -2270,6 +2270,8 @@ bool Lexer::LexRawStringLiteral(Token &Result, const char *CurPtr, const char *PrefixEnd = &CurPtr[PrefixLen]; if (PrefixLen == 16) { Diag(PrefixEnd, diag::err_raw_delim_too_long); + } else if (*PrefixEnd == '\n') { + Diag(PrefixEnd, diag::err_invalid_newline_raw_delim); } else { Diag(PrefixEnd, diag::err_invalid_char_raw_delim) << StringRef(PrefixEnd, 1); diff --git a/clang/test/Lexer/raw-string-dlim-invalid.cpp b/clang/test/Lexer/raw-string-dlim-invalid.cpp new file mode 100644 index 00000000000000..da797f00a1d628 --- /dev/null +++ b/clang/test/Lexer/raw-string-dlim-invalid.cpp @@ -0,0 +1,9 @@ +// RUN: %clang_cc1 -E -fsyntax-only -verify %s + +// expected-error@+2{{invalid character ')' in raw string delimiter; use PREFIX( )PREFIX to delimit raw string}} +// expected-error@+1{{expected expression}} +char const *str1 = R")"; + +// expected-error@+2{{invalid newline character in raw string delimiter; use PREFIX( )PREFIX to delimit raw string}} +// expected-error@+1{{expected expression}} +char const* str2 = R""; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits