Use SaveAndRestore to simplify logic in LiveVariables::runOnAllBlocks(). Patch by Kovarththanan Rajaratnam!

llvm-svn: 86343
This commit is contained in:
Ted Kremenek 2009-11-07 05:57:35 +00:00
parent bc247dce4d
commit 975a119f31
2 changed files with 6 additions and 3 deletions

View File

@ -22,6 +22,9 @@ namespace clang {
template<typename T>
struct SaveAndRestore {
SaveAndRestore(T& x) : X(x), old_value(x) {}
SaveAndRestore(T& x, const T &new_value) : X(x), old_value(x) {
X = new_value;
}
~SaveAndRestore() { X = old_value; }
T get() { return old_value; }
private:

View File

@ -18,6 +18,7 @@
#include "clang/Analysis/CFG.h"
#include "clang/Analysis/Visitors/CFGRecStmtDeclVisitor.h"
#include "clang/Analysis/FlowSensitive/DataflowSolver.h"
#include "clang/Analysis/Support/SaveAndRestore.h"
#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/Support/Compiler.h"
@ -301,10 +302,9 @@ void LiveVariables::runOnAllBlocks(const CFG& cfg,
LiveVariables::ObserverTy* Obs,
bool recordStmtValues) {
Solver S(*this);
ObserverTy* OldObserver = getAnalysisData().Observer;
getAnalysisData().Observer = Obs;
SaveAndRestore<LiveVariables::ObserverTy*> SRObs(getAnalysisData().Observer,
Obs);
S.runOnAllBlocks(cfg, recordStmtValues);
getAnalysisData().Observer = OldObserver;
}
//===----------------------------------------------------------------------===//