]> granicus.if.org Git - clang/commitdiff
Implement RegionStoreManager::RemoveDeadBindings(). This prunes several false warning...
authorZhongxing Xu <xuzhongxing@gmail.com>
Mon, 10 Nov 2008 09:39:04 +0000 (09:39 +0000)
committerZhongxing Xu <xuzhongxing@gmail.com>
Mon, 10 Nov 2008 09:39:04 +0000 (09:39 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@58982 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/RegionStore.cpp

index 20a8ae0d05c64ae40239423219bcb0042f2ce37f..8372a1023eb48710a36a56e485eb003305475750 100644 (file)
@@ -83,10 +83,7 @@ public:
 
   Store RemoveDeadBindings(Store store, Stmt* Loc, const LiveVariables& Live,
                            llvm::SmallVectorImpl<const MemRegion*>& RegionRoots,
-                           LiveSymbolsTy& LSymbols, DeadSymbolsTy& DSymbols) {
-    // FIXME: Implement this.
-    return store;
-  }
+                           LiveSymbolsTy& LSymbols, DeadSymbolsTy& DSymbols);
 
   Store BindDecl(Store store, const VarDecl* VD, Expr* Ex, SVal InitVal, 
                  unsigned Count);
@@ -432,6 +429,25 @@ Store RegionStoreManager::BindCompoundLiteral(Store store,
   return store;
 }
 
+Store RegionStoreManager::RemoveDeadBindings(Store store, Stmt* Loc, 
+                                             const LiveVariables& Live,
+                           llvm::SmallVectorImpl<const MemRegion*>& RegionRoots,
+                           LiveSymbolsTy& LSymbols, DeadSymbolsTy& DSymbols) {
+
+  RegionBindingsTy B = GetRegionBindings(store);
+  typedef SVal::symbol_iterator symbol_iterator;
+
+  // FIXME: Mark all region binding value's symbol as live. We also omit symbols
+  // in SymbolicRegions.
+  for (RegionBindingsTy::iterator I = B.begin(), E = B.end(); I != E; ++I) {
+    SVal X = I.getData();
+    for (symbol_iterator SI=X.symbol_begin(), SE=X.symbol_end(); SI!=SE; ++SI)
+      LSymbols.insert(*SI);
+  }
+
+  return store;
+}
+
 void RegionStoreManager::print(Store store, std::ostream& Out, 
                                const char* nl, const char *sep) {
   llvm::raw_os_ostream OS(Out);