forked from OSchip/llvm-project
Use SaveAndRestore to simplify logic in LiveVariables::runOnAllBlocks(). Patch by Kovarththanan Rajaratnam!
llvm-svn: 86343
This commit is contained in:
parent
bc247dce4d
commit
975a119f31
|
@ -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:
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
|
Loading…
Reference in New Issue