]> granicus.if.org Git - clang/commitdiff
Add support for -Wimplicit-function-declaration, rdar://5907433
authorChris Lattner <sabre@nondot.org>
Mon, 5 May 2008 21:18:06 +0000 (21:18 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 5 May 2008 21:18:06 +0000 (21:18 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@50672 91177308-0d34-0410-b5e6-96231b3b80d8

Driver/clang.cpp
lib/Sema/SemaDecl.cpp

index e7dacc44fd4ab4488b4bd6196b1eb4f736becad7..96f6dde1ec964058ac39afac3f37b2bc45820a4a 100644 (file)
@@ -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);
 
index ada6ceb68a675ed679295348b5fae18ef391288b..f583ad1606a3ed0a8cd8fdb76c4d5527aa1a495e 100644 (file)
@@ -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: