зеркало из https://github.com/microsoft/clang-1.git
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:
Родитель
56f0d16c11
Коммит
88eccaf06f
|
@ -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())
|
||||
|
|
Загрузка…
Ссылка в новой задаче