From: Mike Stump Date: Thu, 2 Apr 2009 02:29:42 +0000 (+0000) Subject: A code modification hint for files that don't end in a newline. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=20d0ee5d23c0f0e879ce1711d11df3118b3fb033;p=clang 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. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@68272 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Lex/Lexer.cpp b/lib/Lex/Lexer.cpp index a8a22ebc35..3a3e86a3cf 100644 --- a/lib/Lex/Lexer.cpp +++ b/lib/Lex/Lexer.cpp @@ -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; diff --git a/test/Lexer/fixit-errors.c b/test/Lexer/fixit-errors.c new file mode 100644 index 0000000000..13b4243195 --- /dev/null +++ b/test/Lexer/fixit-errors.c @@ -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}}