diff options
| author | Ted Kremenek <kremenek@apple.com> | 2009-03-23 15:42:58 +0000 |
|---|---|---|
| committer | Ted Kremenek <kremenek@apple.com> | 2009-03-23 15:42:58 +0000 |
| commit | c7fef2ad530f6220b29d6d3133d6b6ec50adebb5 (patch) | |
| tree | 2de3233b490626c3058220d884a14a848bf86226 /clang/lib | |
| parent | 4a683478d5dcac60111788c73e764f310435d90a (diff) | |
| download | bcm5719-llvm-c7fef2ad530f6220b29d6d3133d6b6ec50adebb5.tar.gz bcm5719-llvm-c7fef2ad530f6220b29d6d3133d6b6ec50adebb5.zip | |
analyzer: Fix embarrassing regression in BasicStore when invalidating struct
values passed-by-reference to unknown functions.
llvm-svn: 67519
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/Analysis/BasicStore.cpp | 4 | ||||
| -rw-r--r-- | clang/lib/Analysis/SymbolManager.cpp | 4 |
2 files changed, 8 insertions, 0 deletions
diff --git a/clang/lib/Analysis/BasicStore.cpp b/clang/lib/Analysis/BasicStore.cpp index b883f880614..01260480d19 100644 --- a/clang/lib/Analysis/BasicStore.cpp +++ b/clang/lib/Analysis/BasicStore.cpp @@ -525,6 +525,10 @@ Store BasicStoreManager::getInitialStore() { // Punt on static variables for now. if (VD->getStorageClass() == VarDecl::Static) continue; + + // Only handle simple types that we can symbolicate. + if (!SymbolManager::canSymbolicate(VD->getType())) + continue; // Initialize globals and parameters to symbolic values. // Initialize local variables to undefined. diff --git a/clang/lib/Analysis/SymbolManager.cpp b/clang/lib/Analysis/SymbolManager.cpp index 4d101f186bd..efc7cd3b86f 100644 --- a/clang/lib/Analysis/SymbolManager.cpp +++ b/clang/lib/Analysis/SymbolManager.cpp @@ -94,6 +94,10 @@ QualType SymbolRegionRValue::getType(ASTContext& C) const { SymbolManager::~SymbolManager() {} +bool SymbolManager::canSymbolicate(QualType T) { + return Loc::IsLocType(T) || T->isIntegerType(); +} + void SymbolReaper::markLive(SymbolRef sym) { TheLiving = F.Add(TheLiving, sym); TheDead = F.Remove(TheDead, sym); |

