summaryrefslogtreecommitdiffstats
path: root/clang/lib/Analysis/ValueState.cpp
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2008-04-25 01:25:15 +0000
committerTed Kremenek <kremenek@apple.com>2008-04-25 01:25:15 +0000
commitecbdf75049f589bace23199f07f23bedcea51b62 (patch)
tree587591e33c3ca37c654fab403b2ed9688e9ae02d /clang/lib/Analysis/ValueState.cpp
parent9165e165dcbd857fa2fcf3ef396e12d86c951291 (diff)
downloadbcm5719-llvm-ecbdf75049f589bace23199f07f23bedcea51b62.tar.gz
bcm5719-llvm-ecbdf75049f589bace23199f07f23bedcea51b62.zip
Do a better job at computing dead symbols.
Implemented support for better localized leaks in the CF reference count checker. Now leaks should be flagged close to where they occur. This should implement the desired functionality in <rdar://problem/5879592>, although the diagnostics still need to be improved. llvm-svn: 50241
Diffstat (limited to 'clang/lib/Analysis/ValueState.cpp')
-rw-r--r--clang/lib/Analysis/ValueState.cpp16
1 files changed, 12 insertions, 4 deletions
diff --git a/clang/lib/Analysis/ValueState.cpp b/clang/lib/Analysis/ValueState.cpp
index ed6a86075b1..94c62281aa3 100644
--- a/clang/lib/Analysis/ValueState.cpp
+++ b/clang/lib/Analysis/ValueState.cpp
@@ -129,14 +129,22 @@ ValueStateManager::RemoveDeadBindings(ValueState* St, Stmt* Loc,
}
// Remove dead variable bindings.
+
+ DeadSymbols.clear();
+
for (ValueState::vb_iterator I = St->vb_begin(), E = St->vb_end(); I!=E ; ++I)
- if (!Marked.count(I.getKey()))
+ if (!Marked.count(I.getKey())) {
NewSt.VarBindings = Remove(NewSt, I.getKey());
+
+ RVal X = I.getData();
+
+ for (RVal::symbol_iterator SI = X.symbol_begin(), SE = X.symbol_end();
+ SI != SE; ++SI)
+ if (!MarkedSymbols.count(*SI)) DeadSymbols.insert(*SI);
+ }
// Remove dead symbols.
-
- DeadSymbols.clear();
-
+
for (ValueState::ce_iterator I = St->ce_begin(), E=St->ce_end(); I!=E; ++I) {
SymbolID sym = I.getKey();
OpenPOWER on IntegriCloud