A code modification hint for files that don't end in a newline.

Eventually, would be nice to be able to run these modifications even
when we don't want the warning or errors for the actual diagnostic.

llvm-svn: 68272
This commit is contained in:
Mike Stump 2009-04-02 02:29:42 +00:00
parent 43533c7f40
commit 0be8875ea4
2 changed files with 16 additions and 1 deletions

View File

@ -1224,7 +1224,9 @@ bool Lexer::LexEndOfFile(Token &Result, const char *CurPtr) {
// C99 5.1.1.2p2: If the file is non-empty and didn't end in a newline, issue
// a pedwarn.
if (CurPtr != BufferStart && (CurPtr[-1] != '\n' && CurPtr[-1] != '\r'))
Diag(BufferEnd, diag::ext_no_newline_eof);
Diag(BufferEnd, diag::ext_no_newline_eof)
<< CodeModificationHint::CreateInsertion(getSourceLocation(BufferEnd),
"\n");
BufferPtr = CurPtr;

View File

@ -0,0 +1,13 @@
// RUN: clang-cc -fsyntax-only -pedantic -fixit %s -o - | clang-cc -pedantic -Werror -x c -
/* This is a test of the various code modification hints that are
provided as part of warning or extension diagnostics. Eventually,
we would like to actually try to perform the suggested
modifications and compile the result to test that no warnings
remain. */
// FIXME: If you put a space at the end of the line, it doesn't work yet!
char *s = "hi\
there";
// The following line isn't terminated, don't fix it.
int i; // expected-error{{no newline at end of file}}