]> granicus.if.org Git - clang/commitdiff
Fix -Wimplicit-function-declaration, which required some refactoring and
authorChris Lattner <sabre@nondot.org>
Thu, 29 Jan 2009 06:55:46 +0000 (06:55 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 29 Jan 2009 06:55:46 +0000 (06:55 +0000)
changes in various diagnostics code.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@63282 91177308-0d34-0410-b5e6-96231b3b80d8

Driver/clang.cpp
include/clang/AST/ASTDiagnostic.h
include/clang/Analysis/AnalysisDiagnostic.h
include/clang/Basic/Diagnostic.h
include/clang/Driver/DriverDiagnostic.h
include/clang/Lex/LexDiagnostic.h
include/clang/Parse/ParseDiagnostic.h
include/clang/Sema/SemaDiagnostic.h
lib/Basic/Diagnostic.cpp

index ca91fc682ba3faf858210307314ba7d11f41ddbc..77d5ef7082adaf33ade55019a2f5c775e713f270 100644 (file)
@@ -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 @@ static void InitializeDiagnostics(Diagnostic &Diags) {
   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);
 }
index 8adc2cd0a22b2b71394a77f4857da517382da801..ddb5b404e4ad582f2dc37d0397ff3b92bdd54c80 100644 (file)
@@ -16,7 +16,6 @@ namespace clang {
   namespace diag { 
     enum {
 #define DIAG(ENUM,FLAGS,DESC) ENUM,
-#include "clang/Basic/DiagnosticCommonKinds.def"
 #define ASTSTART
 #include "clang/Basic/DiagnosticASTKinds.def"
       NUM_BUILTIN_AST_DIAGNOSTICS
index 75d39e1d036b2b65f4911fab998b3ed71aec0ad8..1f2f0891005643d7ee61e7c78424df976d44901d 100644 (file)
@@ -16,7 +16,6 @@ namespace clang {
   namespace diag { 
     enum {
 #define DIAG(ENUM,FLAGS,DESC) ENUM,
-#include "clang/Basic/DiagnosticCommonKinds.def"
 #define ANALYSISSTART
 #include "clang/Basic/DiagnosticAnalysisKinds.def"
       NUM_BUILTIN_ANALYSIS_DIAGNOSTICS
index c57e1a9a89cf5fca31efa9a7cfe5fa7be01f1224..d9d32bcc5d2f3d24b5a9d1ec2089d295cae37b9c 100644 (file)
@@ -43,6 +43,14 @@ namespace clang {
     /// diag::kind - All of the diagnostics that can be emitted by the frontend.
     typedef unsigned kind;
 
+    // Get typedefs for common diagnostics.
+    enum {
+#define DIAG(ENUM,FLAGS,DESC) ENUM,
+#include "clang/Basic/DiagnosticCommonKinds.def"
+      NUM_BUILTIN_COMMON_DIAGNOSTICS
+#undef DIAG
+    };
+      
     /// Enum values that allow the client to map NOTEs, WARNINGs, and EXTENSIONs
     /// to either MAP_IGNORE (nothing), MAP_WARNING (emit a warning), MAP_ERROR
     /// (emit as an error), or MAP_DEFAULT (handle the default way).
index 4afe5b23e8dfbfcf03defb121d307d07770832bc..459d17da4e4773f0894b8cd6ace3a831c163fd7c 100644 (file)
@@ -15,8 +15,7 @@
 namespace clang {
   namespace diag { 
     enum {
-#define DIAG(ENUM,FLAGS,DESC) ENUM,
-#include "clang/Basic/DiagnosticCommonKinds.def"
+// FIXME: REMOVE??
       NUM_BUILTIN_DRIVER_DIAGNOSTICS
     };
   }  // end namespace diag
index 3d285cd6b5ca21dabd646d4fd854530178acdaf0..202605fe5ce577155137a1698611d998619cebf1 100644 (file)
@@ -16,7 +16,6 @@ namespace clang {
   namespace diag { 
     enum {
 #define DIAG(ENUM,FLAGS,DESC) ENUM,
-#include "clang/Basic/DiagnosticCommonKinds.def"
 #define LEXSTART
 #include "clang/Basic/DiagnosticLexKinds.def"
       NUM_BUILTIN_LEX_DIAGNOSTICS
index 12a4b2534fa6e328742b9005497974804e61f238..52a89e89041e7fef49e80465809a4748155ebcc2 100644 (file)
@@ -16,7 +16,6 @@ namespace clang {
   namespace diag { 
     enum {
 #define DIAG(ENUM,FLAGS,DESC) ENUM,
-#include "clang/Basic/DiagnosticCommonKinds.def"
 #define PARSESTART
 #include "clang/Basic/DiagnosticParseKinds.def"
       NUM_BUILTIN_PARSE_DIAGNOSTICS
index 52fa696218dbb30c3dc050e6539bb9d37376bdec..2819641ac9398fdb0b9f04597fffcafc6d535b44 100644 (file)
@@ -16,9 +16,9 @@ namespace clang {
   namespace diag { 
     enum {
 #define DIAG(ENUM,FLAGS,DESC) ENUM,
-#include "clang/Basic/DiagnosticCommonKinds.def"
 #define SEMASTART
 #include "clang/Basic/DiagnosticSemaKinds.def"
+#undef DIAG
       NUM_BUILTIN_SEMA_DIAGNOSTICS
     };
   }  // end namespace diag
index ee0345b18d8a8c5038f7d93781761860356a086e..6e39beb0c89e86ebb6affad231a88c9c4e07dee0 100644 (file)
@@ -36,21 +36,6 @@ enum {
   class_mask = 0x07
 };
 
-namespace clang {
-  namespace diag {
-    enum _kind{
-#define DIAG(ENUM,FLAGS,DESC) ENUM,
-#define LEXSTART
-#define PARSESTART
-#define ASTSTART
-#define SEMASTART
-#define ANALYSISSTART
-#include "clang/Basic/DiagnosticKinds.def"
-      NUM_BUILTIN_DIAGNOSTICS = DIAG_UPPER_LIMIT
-    };
-  }
-}
-
 /// DiagnosticFlags - A set of flags, or'd together, that describe the
 /// diagnostic.
 #define DIAG(ENUM,FLAGS,DESC) FLAGS,
@@ -83,7 +68,7 @@ static unsigned char DiagnosticFlagsAnalysis[] = {
 /// getDiagClass - Return the class field of the diagnostic.
 ///
 static unsigned getBuiltinDiagClass(unsigned DiagID) {
-  assert(DiagID < diag::NUM_BUILTIN_DIAGNOSTICS &&
+  assert(DiagID < DIAG_UPPER_LIMIT &&
          "Diagnostic ID out of range!");
   unsigned res;
   if (DiagID < DIAG_START_LEX)
@@ -145,16 +130,16 @@ namespace clang {
       /// getDescription - Return the description of the specified custom
       /// diagnostic.
       const char *getDescription(unsigned DiagID) const {
-        assert(this && DiagID-diag::NUM_BUILTIN_DIAGNOSTICS < DiagInfo.size() &&
+        assert(this && DiagID-DIAG_UPPER_LIMIT < DiagInfo.size() &&
                "Invalid diagnosic ID");
-        return DiagInfo[DiagID-diag::NUM_BUILTIN_DIAGNOSTICS].second.c_str();
+        return DiagInfo[DiagID-DIAG_UPPER_LIMIT].second.c_str();
       }
       
       /// getLevel - Return the level of the specified custom diagnostic.
       Diagnostic::Level getLevel(unsigned DiagID) const {
-        assert(this && DiagID-diag::NUM_BUILTIN_DIAGNOSTICS < DiagInfo.size() &&
+        assert(this && DiagID-DIAG_UPPER_LIMIT < DiagInfo.size() &&
                "Invalid diagnosic ID");
-        return DiagInfo[DiagID-diag::NUM_BUILTIN_DIAGNOSTICS].first;
+        return DiagInfo[DiagID-DIAG_UPPER_LIMIT].first;
       }
       
       unsigned getOrCreateDiagID(Diagnostic::Level L, const char *Message,
@@ -166,7 +151,7 @@ namespace clang {
           return I->second;
         
         // If not, assign a new ID.
-        unsigned ID = DiagInfo.size()+diag::NUM_BUILTIN_DIAGNOSTICS;
+        unsigned ID = DiagInfo.size()+DIAG_UPPER_LIMIT;
         DiagIDs.insert(std::make_pair(D, ID));
         DiagInfo.push_back(D);
 
@@ -231,16 +216,14 @@ unsigned Diagnostic::getCustomDiagID(Level L, const char *Message) {
 /// level of the specified diagnostic ID is a Note, Warning, or Extension.
 /// Note that this only works on builtin diagnostics, not custom ones.
 bool Diagnostic::isBuiltinNoteWarningOrExtension(unsigned DiagID) {
-  return DiagID < diag::NUM_BUILTIN_DIAGNOSTICS && 
-         getBuiltinDiagClass(DiagID) < ERROR;
+  return DiagID < DIAG_UPPER_LIMIT && getBuiltinDiagClass(DiagID) < ERROR;
 }
 
 
 /// getDescription - Given a diagnostic ID, return a description of the
 /// issue.
 const char *Diagnostic::getDescription(unsigned DiagID) const {
-  if (DiagID < diag::NUM_BUILTIN_DIAGNOSTICS)
-  {
+  if (DiagID < DIAG_UPPER_LIMIT) {
     if (DiagID < DIAG_START_LEX)
       return DiagnosticTextCommon[DiagID];
     else if (DiagID < DIAG_START_PARSE)
@@ -263,7 +246,7 @@ const char *Diagnostic::getDescription(unsigned DiagID) const {
 /// the DiagnosticClient.
 Diagnostic::Level Diagnostic::getDiagnosticLevel(unsigned DiagID) const {
   // Handle custom diagnostics, which cannot be mapped.
-  if (DiagID >= diag::NUM_BUILTIN_DIAGNOSTICS)
+  if (DiagID >= DIAG_UPPER_LIMIT)
     return CustomDiagInfo->getLevel(DiagID);
   
   unsigned DiagClass = getBuiltinDiagClass(DiagID);
@@ -324,7 +307,7 @@ void Diagnostic::ProcessDiag() {
   // ignore extensions and warnings in -Werror and -pedantic-errors modes,
   // which *map* warnings/extensions to errors.
   if (SuppressSystemWarnings &&
-      Info.getID() < diag::NUM_BUILTIN_DIAGNOSTICS &&
+      Info.getID() < DIAG_UPPER_LIMIT &&
       getBuiltinDiagClass(Info.getID()) != ERROR &&
       Info.getLocation().isValid() &&
       Info.getLocation().getSpellingLoc().isInSystemHeader())