A further step of r73690: associate the cast-to type with the created symbol,
because the type of the symbol is used to create the default range. We need the
sign to be consistent.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@73756 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Analysis/SymbolManager.cpp b/lib/Analysis/SymbolManager.cpp
index 5c885cd..4e38a34 100644
--- a/lib/Analysis/SymbolManager.cpp
+++ b/lib/Analysis/SymbolManager.cpp
@@ -92,14 +92,14 @@
 }
 
 const SymbolRegionValue* 
-SymbolManager::getRegionValueSymbol(const MemRegion* R) {
+SymbolManager::getRegionValueSymbol(const MemRegion* R, QualType T) {
   llvm::FoldingSetNodeID profile;
-  SymbolRegionValue::Profile(profile, R);
+  SymbolRegionValue::Profile(profile, R, T);
   void* InsertPos;  
   SymExpr *SD = DataSet.FindNodeOrInsertPos(profile, InsertPos);    
   if (!SD) {  
     SD = (SymExpr*) BPAlloc.Allocate<SymbolRegionValue>();
-    new (SD) SymbolRegionValue(SymbolCounter, R);  
+    new (SD) SymbolRegionValue(SymbolCounter, R, T);  
     DataSet.InsertNode(SD, InsertPos);
     ++SymbolCounter;
   }
@@ -166,6 +166,9 @@
 }
 
 QualType SymbolRegionValue::getType(ASTContext& C) const {
+  if (!T.isNull())
+    return T;
+
   if (const TypedRegion* TR = dyn_cast<TypedRegion>(R))
     return TR->getValueType(C);