Replace the heuristic isSmallerThan with ASTContext::getTypeSize().


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@71206 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Analysis/RegionStore.cpp b/lib/Analysis/RegionStore.cpp
index ea42c46..32226af 100644
--- a/lib/Analysis/RegionStore.cpp
+++ b/lib/Analysis/RegionStore.cpp
@@ -616,13 +616,6 @@
   return loc::MemRegionVal(ER);                    
 }
 
-static bool isSmallerThan(QualType T1, QualType T2) {
-  if (T1->isCharType())
-    return true;
-  else
-    return false;
-}
-
 RegionStoreManager::CastResult
 RegionStoreManager::CastRegion(const GRState* state, const MemRegion* R,
                                QualType CastToTy) {
@@ -675,8 +668,11 @@
   // VarRegion.
   if (isa<VarRegion>(R) || isa<ElementRegion>(R) || isa<FieldRegion>(R)
       || isa<ObjCIvarRegion>(R) || isa<CompoundLiteralRegion>(R)) {
-    if (isSmallerThan(PointeeTy, 
-                      cast<TypedRegion>(R)->getRValueType(getContext()))) {
+    QualType ObjTy = cast<TypedRegion>(R)->getRValueType(getContext());
+    uint64_t PointeeTySize = getContext().getTypeSize(PointeeTy);
+    uint64_t ObjTySize = getContext().getTypeSize(ObjTy);
+
+    if (PointeeTySize > 0 && PointeeTySize < ObjTySize) {
       // Record the cast type of the region.
       state = setCastType(state, R, ToTy);