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
This commit is contained in:
Chris Lattner 2009-01-29 06:55:46 +00:00
Родитель 56f0d16c11
Коммит 88eccaf06f
9 изменённых файлов: 25 добавлений и 35 удалений

Просмотреть файл

@ -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);
}

Просмотреть файл

@ -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

Просмотреть файл

@ -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

Просмотреть файл

@ -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).

Просмотреть файл

@ -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

Просмотреть файл

@ -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

Просмотреть файл

@ -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

Просмотреть файл

@ -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

Просмотреть файл

@ -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())