summaryrefslogtreecommitdiffstats
path: root/clang/lib/StaticAnalyzer/Core/ProgramState.cpp
diff options
context:
space:
mode:
authorJordan Rose <jordan_rose@apple.com>2012-08-08 18:23:31 +0000
committerJordan Rose <jordan_rose@apple.com>2012-08-08 18:23:31 +0000
commit356279ca2de74b0deb274a8b16396bdaebfec92b (patch)
treee55456feb9d16df82038375a4c9292091adaf575 /clang/lib/StaticAnalyzer/Core/ProgramState.cpp
parent3a80cec5e92da70064541f1d11222e2e5c2d4e8c (diff)
downloadbcm5719-llvm-356279ca2de74b0deb274a8b16396bdaebfec92b.tar.gz
bcm5719-llvm-356279ca2de74b0deb274a8b16396bdaebfec92b.zip
[analyzer] Track malloc'd regions stored in structs.
The main blocker on this (besides the previous commit) was that ScanReachableSymbols was not looking through LazyCompoundVals. Once that was fixed, it's easy enough to clear out malloc data on return, just like we do when we bind to a global region. <rdar://problem/10872635> llvm-svn: 161511
Diffstat (limited to 'clang/lib/StaticAnalyzer/Core/ProgramState.cpp')
-rw-r--r--clang/lib/StaticAnalyzer/Core/ProgramState.cpp3
1 files changed, 3 insertions, 0 deletions
diff --git a/clang/lib/StaticAnalyzer/Core/ProgramState.cpp b/clang/lib/StaticAnalyzer/Core/ProgramState.cpp
index 9245a70dd2b..c20979bddb0 100644
--- a/clang/lib/StaticAnalyzer/Core/ProgramState.cpp
+++ b/clang/lib/StaticAnalyzer/Core/ProgramState.cpp
@@ -542,6 +542,9 @@ bool ScanReachableSymbols::scan(SVal val) {
if (loc::MemRegionVal *X = dyn_cast<loc::MemRegionVal>(&val))
return scan(X->getRegion());
+ if (nonloc::LazyCompoundVal *X = dyn_cast<nonloc::LazyCompoundVal>(&val))
+ return scan(X->getRegion());
+
if (nonloc::LocAsInteger *X = dyn_cast<nonloc::LocAsInteger>(&val))
return scan(X->getLoc());
OpenPOWER on IntegriCloud