aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/Lex/Lexer.cpp9
-rw-r--r--test/Index/complete-exprs.c5
2 files changed, 12 insertions, 2 deletions
diff --git a/lib/Lex/Lexer.cpp b/lib/Lex/Lexer.cpp
index cd153e147b..4f2e29e80d 100644
--- a/lib/Lex/Lexer.cpp
+++ b/lib/Lex/Lexer.cpp
@@ -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);
}
diff --git a/test/Index/complete-exprs.c b/test/Index/complete-exprs.c
index fe30d33297..b7bed8c5fd 100644
--- a/test/Index/complete-exprs.c
+++ b/test/Index/complete-exprs.c
@@ -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)