diff options
author | Seth Cantrell <seth.cantrell@gmail.com> | 2012-04-13 03:43:23 +0000 |
---|---|---|
committer | Seth Cantrell <seth.cantrell@gmail.com> | 2012-04-13 03:43:23 +0000 |
commit | 5e6c3f0397254e2a1a9ef85cf13232f89e653640 (patch) | |
tree | 26a8c3947b3c03ad9fbd94c14dba2779c0dfcec8 | |
parent | b3440f5898f39b8f0a86edfa38538716ba4f06cd (diff) |
Support -Wc++98-compat-pedantic as requested:
http://lists.cs.uiuc.edu/pipermail/cfe-commits/Week-of-Mon-20120409/056126.html
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@154655 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/clang/Basic/DiagnosticLexKinds.td | 5 | ||||
-rw-r--r-- | lib/Lex/Lexer.cpp | 8 | ||||
-rw-r--r-- | test/Lexer/newline-eof-c++98-compat.cpp | 4 |
3 files changed, 13 insertions, 4 deletions
diff --git a/include/clang/Basic/DiagnosticLexKinds.td b/include/clang/Basic/DiagnosticLexKinds.td index eb2cf10d50..670283ef1a 100644 --- a/include/clang/Basic/DiagnosticLexKinds.td +++ b/include/clang/Basic/DiagnosticLexKinds.td @@ -48,6 +48,11 @@ def ext_bcpl_comment : Extension< InGroup<Comment>; def ext_no_newline_eof : Extension<"no newline at end of file">, InGroup<DiagGroup<"newline-eof">>; + +def warn_cxx98_compat_no_newline_eof : Warning< + "C++98 requires newline at end of file">, + InGroup<CXX98CompatPedantic>, DefaultIgnore; + def ext_dollar_in_identifier : Extension<"'$' in identifier">, InGroup<DiagGroup<"dollar-in-identifier-extension">>; def ext_charize_microsoft : Extension<"@# is a microsoft extension">, diff --git a/lib/Lex/Lexer.cpp b/lib/Lex/Lexer.cpp index f0c2c8e4f6..535a852429 100644 --- a/lib/Lex/Lexer.cpp +++ b/lib/Lex/Lexer.cpp @@ -2375,10 +2375,10 @@ 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') - && !LangOpts.CPlusPlus0x) // C++11 [lex.phases] 2.2 p2 - Diag(BufferEnd, diag::ext_no_newline_eof) - << FixItHint::CreateInsertion(getSourceLocation(BufferEnd), "\n"); + if (CurPtr != BufferStart && (CurPtr[-1] != '\n' && CurPtr[-1] != '\r')) + Diag(BufferEnd, LangOpts.CPlusPlus0x ? // C++11 [lex.phases] 2.2 p2 + diag::warn_cxx98_compat_no_newline_eof : diag::ext_no_newline_eof) + << FixItHint::CreateInsertion(getSourceLocation(BufferEnd), "\n"); BufferPtr = CurPtr; diff --git a/test/Lexer/newline-eof-c++98-compat.cpp b/test/Lexer/newline-eof-c++98-compat.cpp new file mode 100644 index 0000000000..7f7eebbad7 --- /dev/null +++ b/test/Lexer/newline-eof-c++98-compat.cpp @@ -0,0 +1,4 @@ +// RUN: %clang -cc1 -fsyntax-only -Wc++98-compat-pedantic -std=c++11 -verify %s + +// The following line isn't terminated, don't fix it. +void foo() {} // expected-warning{{C++98 requires newline at end of file}}
\ No newline at end of file |