Fix -Wimplicit-function-declaration, which required some refactoring and
changes in various diagnostics code.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@63282 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/Driver/clang.cpp b/Driver/clang.cpp
index ca91fc6..77d5ef7 100644
--- a/Driver/clang.cpp
+++ b/Driver/clang.cpp
@@ -35,6 +35,7 @@
 #include "clang/AST/TranslationUnit.h"
 #include "clang/CodeGen/ModuleBuilder.h"
 #include "clang/Sema/ParseAST.h"
+#include "clang/Sema/SemaDiagnostic.h"
 #include "clang/AST/ASTConsumer.h"
 #include "clang/Parse/Parser.h"
 #include "clang/Lex/HeaderSearch.h"
@@ -727,7 +728,10 @@
   if (!WarnUndefMacros)
     Diags.setDiagnosticMapping(diag::warn_pp_undef_identifier,diag::MAP_IGNORE);
     
-  if (!WarnImplicitFunctionDeclaration)
+  if (WarnImplicitFunctionDeclaration)
+    Diags.setDiagnosticMapping(diag::ext_implicit_function_decl,
+                               diag::MAP_WARNING);
+  else
     Diags.setDiagnosticMapping(diag::warn_implicit_function_decl,
                                diag::MAP_IGNORE);
 }