From 37d1084efc3d0855c86400b20c00e22c308365c5 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Mon, 5 May 2008 21:18:06 +0000 Subject: [PATCH] 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 --- Driver/clang.cpp | 7 +++++++ lib/Sema/SemaDecl.cpp | 5 +++-- 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 WarnUndefMacros("Wundef", llvm::cl::desc("Warn on use of undefined macros in #if's")); +static llvm::cl::opt +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: