analyzer: Fix embarrassing regression in BasicStore when invalidating struct
values passed-by-reference to unknown functions.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@67519 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Analysis/BasicStore.cpp b/lib/Analysis/BasicStore.cpp
index b883f88..0126048 100644
--- a/lib/Analysis/BasicStore.cpp
+++ b/lib/Analysis/BasicStore.cpp
@@ -525,6 +525,10 @@
       // 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/lib/Analysis/SymbolManager.cpp b/lib/Analysis/SymbolManager.cpp
index 4d101f1..efc7cd3 100644
--- a/lib/Analysis/SymbolManager.cpp
+++ b/lib/Analysis/SymbolManager.cpp
@@ -94,6 +94,10 @@
 
 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);