[cfe-commits] r46274 - in /cfe/trunk: Driver/clang.cpp Lex/PPExpressions.cpp include/clang/Basic/DiagnosticKinds.def test/Preprocessor/if_warning.c
Chris Lattner
sabre at nondot.org
Wed Jan 23 09:19:47 PST 2008
Author: lattner
Date: Wed Jan 23 11:19:46 2008
New Revision: 46274
URL: http://llvm.org/viewvc/llvm-project?rev=46274&view=rev
Log:
add support for -Wundef.
Added:
cfe/trunk/test/Preprocessor/if_warning.c
Modified:
cfe/trunk/Driver/clang.cpp
cfe/trunk/Lex/PPExpressions.cpp
cfe/trunk/include/clang/Basic/DiagnosticKinds.def
Modified: cfe/trunk/Driver/clang.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Driver/clang.cpp?rev=46274&r1=46273&r2=46274&view=diff
==============================================================================
--- cfe/trunk/Driver/clang.cpp (original)
+++ cfe/trunk/Driver/clang.cpp Wed Jan 23 11:19:46 2008
@@ -404,6 +404,11 @@
WarnNoFormatNonLiteral("Wno-format-nonliteral",
llvm::cl::desc("Do not warn about non-literal format strings."));
+static llvm::cl::opt<bool>
+WarnUndefMacros("Wundef",
+ llvm::cl::desc("Warn on use of undefined macros in #if's"));
+
+
/// InitializeDiagnostics - Initialize the diagnostic object, based on the
/// current command line option settings.
static void InitializeDiagnostics(Diagnostic &Diags) {
@@ -423,7 +428,8 @@
if (WarnNoFormatNonLiteral)
Diags.setDiagnosticMapping(diag::warn_printf_not_string_constant,
diag::MAP_IGNORE);
-
+ if (!WarnUndefMacros)
+ Diags.setDiagnosticMapping(diag::warn_pp_undef_identifier,diag::MAP_IGNORE);
}
//===----------------------------------------------------------------------===//
Modified: cfe/trunk/Lex/PPExpressions.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Lex/PPExpressions.cpp?rev=46274&r1=46273&r2=46274&view=diff
==============================================================================
--- cfe/trunk/Lex/PPExpressions.cpp (original)
+++ cfe/trunk/Lex/PPExpressions.cpp Wed Jan 23 11:19:46 2008
@@ -74,6 +74,7 @@
// into a simple 0, unless it is the C++ keyword "true", in which case it
// turns into "1".
if (II->getPPKeywordID() != tok::pp_defined) {
+ PP.Diag(PeekTok, diag::warn_pp_undef_identifier, II->getName());
Result = II->getTokenID() == tok::kw_true;
Result.setIsUnsigned(false); // "0" is signed intmax_t 0.
PP.LexNonComment(PeekTok);
Modified: cfe/trunk/include/clang/Basic/DiagnosticKinds.def
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticKinds.def?rev=46274&r1=46273&r2=46274&view=diff
==============================================================================
--- cfe/trunk/include/clang/Basic/DiagnosticKinds.def (original)
+++ cfe/trunk/include/clang/Basic/DiagnosticKinds.def Wed Jan 23 11:19:46 2008
@@ -206,6 +206,8 @@
"expected ')' in preprocessor expression")
DIAG(err_pp_expected_eol, ERROR,
"expected end of line in preprocessor expression")
+DIAG(warn_pp_undef_identifier, WARNING,
+ "\"%0\" is not defined, evaluates to 0")
DIAG(err_pp_defined_requires_identifier, ERROR,
"operator \"defined\" requires an identifier")
DIAG(err_pp_missing_rparen, ERROR,
Added: cfe/trunk/test/Preprocessor/if_warning.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Preprocessor/if_warning.c?rev=46274&view=auto
==============================================================================
--- cfe/trunk/test/Preprocessor/if_warning.c (added)
+++ cfe/trunk/test/Preprocessor/if_warning.c Wed Jan 23 11:19:46 2008
@@ -0,0 +1,12 @@
+// RUN: clang %s -E -Wundef -Werror 2>&1 | grep error | count 1 &&
+// RUN: clang %s -E -Werror 2>&1 | not grep error
+
+#if foo // Should generate an warning
+#endif
+
+#ifdef foo
+#endif
+
+#if defined(foo)
+#endif
+
More information about the cfe-commits
mailing list