]> granicus.if.org Git - clang/commitdiff
Use SaveAndRestore to simplify logic in LiveVariables::runOnAllBlocks(). Patch by...
authorTed Kremenek <kremenek@apple.com>
Sat, 7 Nov 2009 05:57:35 +0000 (05:57 +0000)
committerTed Kremenek <kremenek@apple.com>
Sat, 7 Nov 2009 05:57:35 +0000 (05:57 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@86343 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Analysis/Support/SaveAndRestore.h
lib/Analysis/LiveVariables.cpp

index 4720c22d990efa83a47bdd0f6ddce52ffc725105..f720639490d9de9ef12f905474fb77c9bec9cc09 100644 (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:
index df7e48dfd4a9706488d4bd8cd3d24f59ffe8d269..070481fa146ddf0220e7b2b9a261e0f20c72bb09 100644 (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;
 }
 
 //===----------------------------------------------------------------------===//