зеркало из https://github.com/microsoft/clang-1.git
GRExprEngine now expects the LiveVariables information to be provided by its creator.
This allows an optimization in AnalysisConsumer where the same LiveVariables information is used between multiple analyses. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53046 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
17fdf95523
Коммит
8b23361a6a
|
@ -154,6 +154,7 @@ namespace {
|
|||
if (!liveness) {
|
||||
liveness.reset(new LiveVariables(*getCFG()));
|
||||
liveness->runOnCFG(*getCFG());
|
||||
liveness->runOnAllBlocks(*getCFG(), 0, true);
|
||||
}
|
||||
return liveness.get();
|
||||
}
|
||||
|
@ -284,7 +285,8 @@ static void ActionGRExprEngine(AnalysisManager& mgr, GRTransferFuncs* tf) {
|
|||
mgr.DisplayFunction();
|
||||
|
||||
// Construct the analysis engine.
|
||||
GRExprEngine Eng(*mgr.getCFG(), *mgr.getCodeDecl(), mgr.getContext());
|
||||
GRExprEngine Eng(*mgr.getCFG(), *mgr.getCodeDecl(), mgr.getContext(),
|
||||
*mgr.getLiveVariables());
|
||||
Eng.setTransferFunctions(tf);
|
||||
|
||||
// Execute the worklist algorithm.
|
||||
|
|
|
@ -57,7 +57,7 @@ protected:
|
|||
|
||||
/// Liveness - live-variables information the ValueDecl* and block-level
|
||||
/// Expr* in the CFG. Used to prune out dead state.
|
||||
LiveVariables Liveness;
|
||||
LiveVariables& Liveness;
|
||||
|
||||
/// DeadSymbols - A scratch set used to record the set of symbols that
|
||||
/// were just marked dead by a call to ValueStateManager::RemoveDeadBindings.
|
||||
|
@ -180,7 +180,7 @@ protected:
|
|||
UndefArgsTy MsgExprUndefArgs;
|
||||
|
||||
public:
|
||||
GRExprEngine(CFG& cfg, Decl& CD, ASTContext& Ctx);
|
||||
GRExprEngine(CFG& cfg, Decl& CD, ASTContext& Ctx, LiveVariables& L);
|
||||
~GRExprEngine();
|
||||
|
||||
void ExecuteWorkList(unsigned Steps = 150000) {
|
||||
|
|
|
@ -39,11 +39,12 @@ static inline Selector GetNullarySelector(const char* name, ASTContext& Ctx) {
|
|||
}
|
||||
|
||||
|
||||
GRExprEngine::GRExprEngine(CFG& cfg, Decl& CD, ASTContext& Ctx)
|
||||
GRExprEngine::GRExprEngine(CFG& cfg, Decl& CD, ASTContext& Ctx,
|
||||
LiveVariables& L)
|
||||
: CoreEngine(cfg, CD, Ctx, *this),
|
||||
G(CoreEngine.getGraph()),
|
||||
Parents(0),
|
||||
Liveness(G.getCFG()),
|
||||
Liveness(L),
|
||||
Builder(NULL),
|
||||
StateMgr(G.getContext(), G.getAllocator()),
|
||||
BasicVals(StateMgr.getBasicValueFactory()),
|
||||
|
@ -51,12 +52,7 @@ GRExprEngine::GRExprEngine(CFG& cfg, Decl& CD, ASTContext& Ctx)
|
|||
SymMgr(StateMgr.getSymbolManager()),
|
||||
CurrentStmt(NULL),
|
||||
NSExceptionII(NULL), NSExceptionInstanceRaiseSelectors(NULL),
|
||||
RaiseSel(GetNullarySelector("raise", G.getContext())) {
|
||||
|
||||
// Compute liveness information.
|
||||
Liveness.runOnCFG(G.getCFG());
|
||||
Liveness.runOnAllBlocks(G.getCFG(), NULL, true);
|
||||
}
|
||||
RaiseSel(GetNullarySelector("raise", G.getContext())) {}
|
||||
|
||||
GRExprEngine::~GRExprEngine() {
|
||||
for (BugTypeSet::iterator I = BugTypes.begin(), E = BugTypes.end(); I!=E; ++I)
|
||||
|
|
Загрузка…
Ссылка в новой задаче