summaryrefslogtreecommitdiffstats
path: root/clang/Driver/AnalysisConsumer.cpp
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2008-10-24 01:04:59 +0000
committerTed Kremenek <kremenek@apple.com>2008-10-24 01:04:59 +0000
commit6779f893b9b1cd2d88e58a062cfa9a5e6a8c7fee (patch)
tree57e3e7e1423f99f5de302ff9b262d78c75139b55 /clang/Driver/AnalysisConsumer.cpp
parent607f67b16ca25c9d9afa725dd644487089702ff3 (diff)
downloadbcm5719-llvm-6779f893b9b1cd2d88e58a062cfa9a5e6a8c7fee.tar.gz
bcm5719-llvm-6779f893b9b1cd2d88e58a062cfa9a5e6a8c7fee.zip
Make the analyzer store (memory model) a command line option.
llvm-svn: 58056
Diffstat (limited to 'clang/Driver/AnalysisConsumer.cpp')
-rw-r--r--clang/Driver/AnalysisConsumer.cpp22
1 files changed, 18 insertions, 4 deletions
diff --git a/clang/Driver/AnalysisConsumer.cpp b/clang/Driver/AnalysisConsumer.cpp
index e22178b73eb..12ba732bd9c 100644
--- a/clang/Driver/AnalysisConsumer.cpp
+++ b/clang/Driver/AnalysisConsumer.cpp
@@ -65,7 +65,7 @@ namespace {
const bool VisGraphviz;
const bool VisUbigraph;
const bool TrimGraph;
- const LangOptions& LOpts;
+ const LangOptions& LOpts;
Diagnostic &Diags;
ASTContext* Ctx;
Preprocessor* PP;
@@ -74,19 +74,21 @@ namespace {
const std::string FName;
llvm::OwningPtr<PathDiagnosticClient> PD;
bool AnalyzeAll;
+ AnalysisStores SM;
AnalysisConsumer(Diagnostic &diags, Preprocessor* pp,
PreprocessorFactory* ppf,
const LangOptions& lopts,
const std::string& fname,
const std::string& htmldir,
+ AnalysisStores sm,
bool visgraphviz, bool visubi, bool trim, bool analyzeAll)
: VisGraphviz(visgraphviz), VisUbigraph(visubi), TrimGraph(trim),
LOpts(lopts), Diags(diags),
Ctx(0), PP(pp), PPF(ppf),
HTMLDir(htmldir),
FName(fname),
- AnalyzeAll(analyzeAll) {}
+ AnalyzeAll(analyzeAll), SM(sm) {}
void addCodeAction(CodeAction action) {
FunctionActions.push_back(action);
@@ -126,6 +128,15 @@ namespace {
Decl* getCodeDecl() const { return D; }
Stmt* getBody() const { return Body; }
+ GRStateManager::StoreManagerCreator getStoreManagerCreator() {
+ switch (C.SM) {
+ default:
+#define ANALYSIS_STORE(NAME, CMDFLAG, DESC)\
+case NAME##Model: return Create##NAME##Manager;
+#include "Analyses.def"
+ }
+ };
+
virtual CFG* getCFG() {
if (!cfg) cfg.reset(CFG::buildCFG(getBody()));
return cfg.get();
@@ -324,7 +335,9 @@ static void ActionGRExprEngine(AnalysisManager& mgr, GRTransferFuncs* tf,
// Display progress.
mgr.DisplayFunction();
- GRExprEngine Eng(*mgr.getCFG(), *mgr.getCodeDecl(), mgr.getContext(), *L);
+ GRExprEngine Eng(*mgr.getCFG(), *mgr.getCodeDecl(), mgr.getContext(), *L,
+ mgr.getStoreManagerCreator());
+
Eng.setTransferFunctions(tf);
if (StandardWarnings) {
@@ -436,6 +449,7 @@ static void ActionWarnObjCMethSigs(AnalysisManager& mgr) {
//===----------------------------------------------------------------------===//
ASTConsumer* clang::CreateAnalysisConsumer(Analyses* Beg, Analyses* End,
+ AnalysisStores SM,
Diagnostic &diags, Preprocessor* pp,
PreprocessorFactory* ppf,
const LangOptions& lopts,
@@ -446,7 +460,7 @@ ASTConsumer* clang::CreateAnalysisConsumer(Analyses* Beg, Analyses* End,
bool analyzeAll) {
llvm::OwningPtr<AnalysisConsumer>
- C(new AnalysisConsumer(diags, pp, ppf, lopts, fname, htmldir,
+ C(new AnalysisConsumer(diags, pp, ppf, lopts, fname, htmldir, SM,
VisGraphviz, VisUbi, trim, analyzeAll));
for ( ; Beg != End ; ++Beg)
OpenPOWER on IntegriCloud