diff options
| author | Ted Kremenek <kremenek@apple.com> | 2012-06-01 20:04:04 +0000 |
|---|---|---|
| committer | Ted Kremenek <kremenek@apple.com> | 2012-06-01 20:04:04 +0000 |
| commit | c3da376fbc567e1d9143bc1d908ddd07044a47e8 (patch) | |
| tree | 94d753b6053ba5c2c9bebb34b9cc7d4efe4f8650 /clang/lib/StaticAnalyzer/Core/ProgramState.cpp | |
| parent | 0bc272cf9a27a9fe15305df77df3d58edb3bd5f6 (diff) | |
| download | bcm5719-llvm-c3da376fbc567e1d9143bc1d908ddd07044a47e8.tar.gz bcm5719-llvm-c3da376fbc567e1d9143bc1d908ddd07044a47e8.zip | |
static analyzer: add inlining support for directly called blocks.
llvm-svn: 157833
Diffstat (limited to 'clang/lib/StaticAnalyzer/Core/ProgramState.cpp')
| -rw-r--r-- | clang/lib/StaticAnalyzer/Core/ProgramState.cpp | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/clang/lib/StaticAnalyzer/Core/ProgramState.cpp b/clang/lib/StaticAnalyzer/Core/ProgramState.cpp index b9cfa27808c..a666de0c5ce 100644 --- a/clang/lib/StaticAnalyzer/Core/ProgramState.cpp +++ b/clang/lib/StaticAnalyzer/Core/ProgramState.cpp @@ -568,6 +568,16 @@ bool ScanReachableSymbols::scan(const MemRegion *R) { if (!scan(SR->getSuperRegion())) return false; + // Regions captured by a block are also implicitly reachable. + if (const BlockDataRegion *BDR = dyn_cast<BlockDataRegion>(R)) { + BlockDataRegion::referenced_vars_iterator I = BDR->referenced_vars_begin(), + E = BDR->referenced_vars_end(); + for ( ; I != E; ++I) { + if (!scan(I.getCapturedRegion())) + return false; + } + } + // Now look at the binding to this region (if any). if (!scan(state->getSValAsScalarOrLoc(R))) return false; |

