aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2008-05-05 21:18:06 +0000
committerChris Lattner <sabre@nondot.org>2008-05-05 21:18:06 +0000
commit37d1084efc3d0855c86400b20c00e22c308365c5 (patch)
treee6a45faf0cad5e4348d07678bdb16f7f53378f3b
parent44cbbb05f544c5ee171000b2abf905aa7dc5340d (diff)
Add support for -Wimplicit-function-declaration, rdar://5907433
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@50672 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--Driver/clang.cpp7
-rw-r--r--lib/Sema/SemaDecl.cpp5
2 files changed, 10 insertions, 2 deletions
diff --git a/Driver/clang.cpp b/Driver/clang.cpp
index e7dacc44fd..96f6dde1ec 100644
--- a/Driver/clang.cpp
+++ b/Driver/clang.cpp
@@ -475,6 +475,9 @@ static llvm::cl::opt<bool>
WarnUndefMacros("Wundef",
llvm::cl::desc("Warn on use of undefined macros in #if's"));
+static llvm::cl::opt<bool>
+WarnImplicitFunctionDeclaration("Wimplicit-function-declaration"
+ "Warn about use of implicitly defined functions");
/// InitializeDiagnostics - Initialize the diagnostic object, based on the
/// current command line option settings.
@@ -498,6 +501,10 @@ static void InitializeDiagnostics(Diagnostic &Diags) {
if (!WarnUndefMacros)
Diags.setDiagnosticMapping(diag::warn_pp_undef_identifier,diag::MAP_IGNORE);
+ if (!WarnImplicitFunctionDeclaration)
+ Diags.setDiagnosticMapping(diag::warn_implicit_function_decl,
+ diag::MAP_IGNORE);
+
if (MSExtensions) // MS allows unnamed struct/union fields.
Diags.setDiagnosticMapping(diag::w_no_declarators, diag::MAP_IGNORE);
diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp
index ada6ceb68a..f583ad1606 100644
--- a/lib/Sema/SemaDecl.cpp
+++ b/lib/Sema/SemaDecl.cpp
@@ -1268,9 +1268,10 @@ Sema::DeclTy *Sema::ActOnFinishFunctionBody(DeclTy *D, StmtTy *Body) {
/// call, forming a call to an implicitly defined function (per C99 6.5.1p2).
ScopedDecl *Sema::ImplicitlyDefineFunction(SourceLocation Loc,
IdentifierInfo &II, Scope *S) {
- if (getLangOptions().C99) // Extension in C99.
+ // Extension in C99. Legal in C90, but warn about it.
+ if (getLangOptions().C99)
Diag(Loc, diag::ext_implicit_function_decl, II.getName());
- else // Legal in C90, but warn about it.
+ else
Diag(Loc, diag::warn_implicit_function_decl, II.getName());
// FIXME: handle stuff like: