Improve our handling of NULL after an escaping '\' in a string
literal. Fixes <rdar://problem/8044135>. llvm-svn: 105181
This commit is contained in:
parent
50d612d6c6
commit
fe4a4107d8
|
@ -753,11 +753,15 @@ void Lexer::LexStringLiteral(Token &Result, const char *CurPtr, bool Wide) {
|
|||
char C = getAndAdvanceChar(CurPtr, Result);
|
||||
while (C != '"') {
|
||||
// Skip escaped characters.
|
||||
bool Escaped = false;
|
||||
if (C == '\\') {
|
||||
// Skip the escaped character.
|
||||
C = getAndAdvanceChar(CurPtr, Result);
|
||||
} else if (C == '\n' || C == '\r' || // Newline.
|
||||
(C == 0 && CurPtr-1 == BufferEnd)) { // End of file.
|
||||
Escaped = true;
|
||||
}
|
||||
|
||||
if ((!Escaped && (C == '\n' || C == '\r')) || // Newline.
|
||||
(C == 0 && CurPtr-1 == BufferEnd)) { // End of file.
|
||||
if (!isLexingRawMode() && !Features.AsmPreprocessor)
|
||||
Diag(BufferPtr, diag::err_unterminated_string);
|
||||
FormTokenWithChars(Result, CurPtr-1, tok::unknown);
|
||||
|
@ -765,6 +769,7 @@ void Lexer::LexStringLiteral(Token &Result, const char *CurPtr, bool Wide) {
|
|||
} else if (C == 0) {
|
||||
NulCharacter = CurPtr-1;
|
||||
}
|
||||
|
||||
C = getAndAdvanceChar(CurPtr, Result);
|
||||
}
|
||||
|
||||
|
|
|
@ -10,6 +10,8 @@ int test(int i, int j, int k, int l) {
|
|||
struct X f1 = { 17 };
|
||||
void f2() { f1(17); }
|
||||
|
||||
const char *str = "Hello, \nWorld";
|
||||
|
||||
// RUN: c-index-test -code-completion-at=%s:7:9 -Xclang -code-completion-patterns %s | FileCheck -check-prefix=CHECK-CC1 %s
|
||||
// CHECK-CC1: macro definition:{TypedText __VERSION__} (70)
|
||||
// CHECK-CC1: FunctionDecl:{ResultType int}{TypedText f}{LeftParen (}{Placeholder int}{RightParen )} (12)
|
||||
|
@ -35,3 +37,6 @@ void f2() { f1(17); }
|
|||
// CHECK-CC4: FunctionDecl:{ResultType int}{TypedText f}{LeftParen (}{Placeholder int}{RightParen )} (50)
|
||||
// CHECK-CC4: VarDecl:{ResultType struct X}{TypedText f1} (50)
|
||||
|
||||
// RUN: c-index-test -code-completion-at=%s:13:28 -Xclang -code-completion-patterns %s | FileCheck -check-prefix=CHECK-CC5 %s
|
||||
// CHECK-CC5: NotImplemented:{TypedText void} (40)
|
||||
// CHECK-CC5: NotImplemented:{TypedText volatile} (40)
|
||||
|
|
Loading…
Reference in New Issue