diff --git a/clang/include/clang/Basic/DiagnosticLexKinds.td b/clang/include/clang/Basic/DiagnosticLexKinds.td index 1354543612b9f..d7c172e654635 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 d927f28b47c27..c98645993abe0 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 0000000000000..da797f00a1d62 --- /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"";