[cfe-commits] r147116 - in /cfe/trunk: lib/Analysis/LiveVariables.cpp test/Analysis/dead-stores.m
Ted Kremenek
kremenek at apple.com
Wed Dec 21 16:46:32 PST 2011
Author: kremenek
Date: Wed Dec 21 18:46:32 2011
New Revision: 147116
URL: http://llvm.org/viewvc/llvm-project?rev=147116&view=rev
Log:
Fix regression in LiveVariables when reasoning about variables captured by blocks.
Modified:
cfe/trunk/lib/Analysis/LiveVariables.cpp
cfe/trunk/test/Analysis/dead-stores.m
Modified: cfe/trunk/lib/Analysis/LiveVariables.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Analysis/LiveVariables.cpp?rev=147116&r1=147115&r2=147116&view=diff
==============================================================================
--- cfe/trunk/lib/Analysis/LiveVariables.cpp (original)
+++ cfe/trunk/lib/Analysis/LiveVariables.cpp Wed Dec 21 18:46:32 2011
@@ -354,11 +354,10 @@
}
void TransferFunctions::VisitBlockExpr(BlockExpr *BE) {
- AnalysisDeclContext::referenced_decls_iterator I, E;
- llvm::tie(I, E) =
- LV.analysisContext.getReferencedBlockVars(BE->getBlockDecl());
- for ( ; I != E ; ++I) {
- const VarDecl *VD = *I;
+ const BlockDecl *BD = BE->getBlockDecl();
+ for (BlockDecl::capture_const_iterator it = BD->capture_begin(),
+ ei = BD->capture_end(); it != ei; ++it) {
+ const VarDecl *VD = it->getVariable();
if (isAlwaysAlive(VD))
continue;
val.liveDecls = LV.DSetFact.add(val.liveDecls, VD);
Modified: cfe/trunk/test/Analysis/dead-stores.m
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/dead-stores.m?rev=147116&r1=147115&r2=147116&view=diff
==============================================================================
--- cfe/trunk/test/Analysis/dead-stores.m (original)
+++ cfe/trunk/test/Analysis/dead-stores.m Wed Dec 21 18:46:32 2011
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -analyze -analyzer-checker=experimental.core -analyzer-checker=deadcode.DeadStores,osx.cocoa.RetainCount -verify %s
+// RUN: %clang_cc1 -analyze -analyzer-checker=experimental.core -analyzer-checker=deadcode.DeadStores,osx.cocoa.RetainCount -fblocks -verify %s
typedef signed char BOOL;
typedef unsigned int NSUInteger;
@@ -76,3 +76,15 @@
}
@end
+// Don't flag dead stores when a variable is captured in a block used
+// by a property access.
+ at interface RDar10591355
+ at property (assign) int x;
+ at end
+
+RDar10591355 *rdar10591355_aux();
+
+void rdar10591355() {
+ RDar10591355 *p = rdar10591355_aux();
+ ^{ (void) p.x; }();
+}
More information about the cfe-commits
mailing list