> > On Nov 17, 2012, at 12:42 PM, Nico Weber <[email protected]> wrote: > >> Doug, Pawel marked PR14369 as blocker for the 3.2 release. Is it ok to >> merge this? (And if so, how do I do that?) > > Approved. You can merge the patch into the release_32 branch in Subversion. > > - Doug
>> >> On Nov 17, 2012, at 12:42 PM, Nico Weber <[email protected]> wrote: >> >>> Doug, Pawel marked PR14369 as blocker for the 3.2 release. Is it ok to >>> merge this? (And if so, how do I do that?) >> >> Approved. You can merge the patch into the release_32 branch in Subversion. >> >> - Doug >> Committed revision 168808. There was a bit of a hiccup merging r168269 into lib/Lex/Lexer.cpp, I got 1 conflict but seems to be resolved cleanly. Pawel > >> On Sat, Nov 17, 2012 at 12:25 PM, Nico Weber <[email protected]> wrote: >>> Author: nico >>> Date: Sat Nov 17 14:25:54 2012 >>> New Revision: 168269 >>> >>> URL: http://llvm.org/viewvc/llvm-project?rev=168269&view=rev >>> Log: >>> Fix crash on end-of-file after \ in a char literal, fixes PR14369. >>> >>> This makes LexCharConstant() look more like LexStringLiteral(), which >>> doesn't >>> have this bug. Add tests for eof after \ for several other cases. >>> >>> >>> Added: >>> cfe/trunk/test/Lexer/eof-char.c >>> cfe/trunk/test/Lexer/eof-file.c >>> cfe/trunk/test/Lexer/eof-string.c >>> Modified: >>> cfe/trunk/lib/Lex/Lexer.cpp >>> >>> Modified: cfe/trunk/lib/Lex/Lexer.cpp >>> URL: >>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/Lexer.cpp?rev=168269&r1=168268&r2=168269&view=diff >>> ============================================================================== >>> --- cfe/trunk/lib/Lex/Lexer.cpp (original) >>> +++ cfe/trunk/lib/Lex/Lexer.cpp Sat Nov 17 14:25:54 2012 >>> @@ -1823,16 +1823,18 @@ >>> >>> while (C != '\'') { >>> // Skip escaped characters. >>> - if (C == '\\') { >>> - // Skip the escaped character. >>> - getAndAdvanceChar(CurPtr, Result); >>> - } else if (C == '\n' || C == '\r' || // Newline. >>> - (C == 0 && CurPtr-1 == BufferEnd)) { // End of file. >>> + if (C == '\\') >>> + C = getAndAdvanceChar(CurPtr, Result); >>> + >>> + if (C == '\n' || C == '\r' || // Newline. >>> + (C == 0 && CurPtr-1 == BufferEnd)) { // End of file. >>> if (!isLexingRawMode() && !LangOpts.AsmPreprocessor) >>> Diag(BufferPtr, diag::ext_unterminated_char); >>> FormTokenWithChars(Result, CurPtr-1, tok::unknown); >>> return; >>> - } else if (C == 0) { >>> + } >>> + >>> + if (C == 0) { >>> if (isCodeCompletionPoint(CurPtr-1)) { >>> PP->CodeCompleteNaturalLanguage(); >>> FormTokenWithChars(Result, CurPtr-1, tok::unknown); >>> >>> Added: cfe/trunk/test/Lexer/eof-char.c >>> URL: >>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Lexer/eof-char.c?rev=168269&view=auto >>> ============================================================================== >>> --- cfe/trunk/test/Lexer/eof-char.c (added) >>> +++ cfe/trunk/test/Lexer/eof-char.c Sat Nov 17 14:25:54 2012 >>> @@ -0,0 +1,8 @@ >>> +// RUN: %clang_cc1 %s -verify -fsyntax-only >>> +// vim: set binary noeol: >>> + >>> +// This file intentionally ends without a \n on the last line. Make sure >>> your >>> +// editor doesn't add one. >>> + >>> +// expected-warning@+1{{missing terminating ' character}} >>> expected-error@+1{{expected expression}} expected-error@+1{{expected ';'}} >>> +char c = '\ >>> \ No newline at end of file >>> >>> Added: cfe/trunk/test/Lexer/eof-file.c >>> URL: >>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Lexer/eof-file.c?rev=168269&view=auto >>> ============================================================================== >>> --- cfe/trunk/test/Lexer/eof-file.c (added) >>> +++ cfe/trunk/test/Lexer/eof-file.c Sat Nov 17 14:25:54 2012 >>> @@ -0,0 +1,8 @@ >>> +// RUN: %clang_cc1 %s -verify -fsyntax-only >>> +// vim: set binary noeol: >>> + >>> +// This file intentionally ends without a \n on the last line. Make sure >>> your >>> +// editor doesn't add one. >>> + >>> +// expected-error@+1{{expected expression}} expected-error@+1{{expected >>> ';'}} >>> +char c = \ >>> \ No newline at end of file >>> >>> Added: cfe/trunk/test/Lexer/eof-string.c >>> URL: >>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Lexer/eof-string.c?rev=168269&view=auto >>> ============================================================================== >>> --- cfe/trunk/test/Lexer/eof-string.c (added) >>> +++ cfe/trunk/test/Lexer/eof-string.c Sat Nov 17 14:25:54 2012 >>> @@ -0,0 +1,8 @@ >>> +// RUN: %clang_cc1 %s -verify -fsyntax-only >>> +// vim: set binary noeol: >>> + >>> +// This file intentionally ends without a \n on the last line. Make sure >>> your >>> +// editor doesn't add one. >>> + >>> +// expected-warning@+1{{missing terminating '"' character}} >>> expected-error@+1{{expected expression}} expected-error@+1{{expected ';'}} >>> +char c = "\ >>> \ No newline at end of file >>> >>> >>> _______________________________________________ >>> cfe-commits mailing list >>> [email protected] >>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits > > > _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
