diff options
author | Ted Kremenek <kremenek@apple.com> | 2008-07-14 23:41:13 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2008-07-14 23:41:13 +0000 |
commit | fb9a48cf5ecceaa96f26a4595305e67546dcad33 (patch) | |
tree | 28da0f4a9b0c38ac9ec67178e408570e393be198 /Driver/AnalysisConsumer.cpp | |
parent | 8f2698621f5090db1dea691059bd0ebd79fb7f14 (diff) |
Break off declaration of Analysis enum into Analyses.def. The driver options in
clang.cpp now #include these definitions to create the command line options, and
AnalysisConsumer #includes this file to generate the switch statement to create
actions.
Renamed -check-objc-methodsigs to -warn-objc-methodsigs.
The "missing -dealloc" check is now optional: -warn-objc-missing-dealloc
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53575 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'Driver/AnalysisConsumer.cpp')
-rw-r--r-- | Driver/AnalysisConsumer.cpp | 69 |
1 files changed, 18 insertions, 51 deletions
diff --git a/Driver/AnalysisConsumer.cpp b/Driver/AnalysisConsumer.cpp index 28ebe1d11b..cd24e2efea 100644 --- a/Driver/AnalysisConsumer.cpp +++ b/Driver/AnalysisConsumer.cpp @@ -41,11 +41,9 @@ using namespace clang; // Basic type definitions. //===----------------------------------------------------------------------===// -namespace { - +namespace { class AnalysisManager; - typedef void (*CodeAction)(AnalysisManager& Mgr); - + typedef void (*CodeAction)(AnalysisManager& Mgr); } // end anonymous namespace //===----------------------------------------------------------------------===// @@ -287,14 +285,14 @@ void AnalysisConsumer::HandleCode(Decl* D, Stmt* Body, Actions actions) { // Analyses //===----------------------------------------------------------------------===// -static void ActionDeadStores(AnalysisManager& mgr) { +static void ActionWarnDeadStores(AnalysisManager& mgr) { if (LiveVariables* L = mgr.getLiveVariables()) { BugReporter BR(mgr); CheckDeadStores(*L, BR); } } -static void ActionUninitVals(AnalysisManager& mgr) { +static void ActionWarnUninitVals(AnalysisManager& mgr) { if (CFG* c = mgr.getCFG()) CheckUninitializedValues(*c, mgr.getContext(), mgr.getDiagnostic()); } @@ -327,7 +325,7 @@ static void ActionGRExprEngine(AnalysisManager& mgr, GRTransferFuncs* tf) { Eng.ViewGraph(mgr.shouldTrimGraph()); } -static void ActionRefLeakCheckerAux(AnalysisManager& mgr, bool GCEnabled, +static void ActionCheckerCFRefAux(AnalysisManager& mgr, bool GCEnabled, bool StandardWarnings) { GRTransferFuncs* TF = MakeCFRefCountTF(mgr.getContext(), @@ -338,31 +336,31 @@ static void ActionRefLeakCheckerAux(AnalysisManager& mgr, bool GCEnabled, ActionGRExprEngine(mgr, TF); } -static void ActionRefLeakChecker(AnalysisManager& mgr) { +static void ActionCheckerCFRef(AnalysisManager& mgr) { switch (mgr.getLangOptions().getGCMode()) { default: assert (false && "Invalid GC mode."); case LangOptions::NonGC: - ActionRefLeakCheckerAux(mgr, false, true); + ActionCheckerCFRefAux(mgr, false, true); break; case LangOptions::GCOnly: - ActionRefLeakCheckerAux(mgr, true, true); + ActionCheckerCFRefAux(mgr, true, true); break; case LangOptions::HybridGC: - ActionRefLeakCheckerAux(mgr, false, true); - ActionRefLeakCheckerAux(mgr, true, false); + ActionCheckerCFRefAux(mgr, false, true); + ActionCheckerCFRefAux(mgr, true, false); break; } } -static void ActionSimpleChecks(AnalysisManager& mgr) { +static void ActionCheckerSimple(AnalysisManager& mgr) { ActionGRExprEngine(mgr, MakeGRSimpleValsTF()); } -static void ActionLiveness(AnalysisManager& mgr) { +static void ActionDisplayLiveVariables(AnalysisManager& mgr) { if (LiveVariables* L = mgr.getLiveVariables()) { mgr.DisplayFunction(); L->dumpBlockLiveness(mgr.getSourceManager()); @@ -383,14 +381,14 @@ static void ActionCFGView(AnalysisManager& mgr) { } } -static void ActionCheckObjCDealloc(AnalysisManager& mgr) { +static void ActionWarnObjCDealloc(AnalysisManager& mgr) { BugReporter BR(mgr); CheckObjCDealloc(cast<ObjCImplementationDecl>(mgr.getCodeDecl()), mgr.getLangOptions(), BR); } -static void ActionCheckObjCInstMethSignature(AnalysisManager& mgr) { +static void ActionWarnObjCMethSigs(AnalysisManager& mgr) { BugReporter BR(mgr); CheckObjCInstMethSignature(cast<ObjCImplementationDecl>(mgr.getCodeDecl()), @@ -416,45 +414,14 @@ ASTConsumer* clang::CreateAnalysisConsumer(Analyses* Beg, Analyses* End, for ( ; Beg != End ; ++Beg) switch (*Beg) { - case WarnDeadStores: - C->addCodeAction(&ActionDeadStores); - break; - - case WarnUninitVals: - C->addCodeAction(&ActionUninitVals); +#define ANALYSIS(NAME, CMD, DESC)\ + case NAME:\ + C->addCodeAction(&Action ## NAME);\ break; - - case CheckObjCMethSigs: - C->addObjCImplementationAction(&ActionCheckObjCInstMethSignature); - break; - - case DisplayLiveVariables: - C->addCodeAction(&ActionLiveness); - break; - - case CheckerCFRef: - C->addCodeAction(&ActionRefLeakChecker); - break; - - case CheckerSimple: - C->addCodeAction(&ActionSimpleChecks); - break; - - case CFGDump: - C->addCodeAction(&ActionCFGDump); - break; - - case CFGView: - C->addCodeAction(&ActionCFGView); - break; - +#include "Analyses.def" default: break; } - // Checks we always perform: - if (lopts.getGCMode() != LangOptions::GCOnly) - C->addObjCImplementationAction(&ActionCheckObjCDealloc); - return C.take(); } |