Author: dgregor Date: Sun May 30 17:59:50 2010 New Revision: 105181 URL: http://llvm.org/viewvc/llvm-project?rev=105181&view=rev Log: Improve our handling of NULL after an escaping '\' in a string literal. Fixes <rdar://problem/8044135>.
Modified: cfe/trunk/lib/Lex/Lexer.cpp cfe/trunk/test/Index/complete-exprs.c Modified: cfe/trunk/lib/Lex/Lexer.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/Lexer.cpp?rev=105181&r1=105180&r2=105181&view=diff ============================================================================== --- cfe/trunk/lib/Lex/Lexer.cpp (original) +++ cfe/trunk/lib/Lex/Lexer.cpp Sun May 30 17:59:50 2010 @@ -753,11 +753,15 @@ 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 @@ } else if (C == 0) { NulCharacter = CurPtr-1; } + C = getAndAdvanceChar(CurPtr, Result); } Modified: cfe/trunk/test/Index/complete-exprs.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Index/complete-exprs.c?rev=105181&r1=105180&r2=105181&view=diff ============================================================================== --- cfe/trunk/test/Index/complete-exprs.c (original) +++ cfe/trunk/test/Index/complete-exprs.c Sun May 30 17:59:50 2010 @@ -10,6 +10,8 @@ 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 @@ // 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) _______________________________________________ cfe-commits mailing list cfe-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits