Add getSize() support for StringRegion.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59930 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Analysis/RegionStore.cpp b/lib/Analysis/RegionStore.cpp
index 05d311d..cdc8b27 100644
--- a/lib/Analysis/RegionStore.cpp
+++ b/lib/Analysis/RegionStore.cpp
@@ -272,9 +272,8 @@
   }
 
   if (const StringRegion* SR = dyn_cast<StringRegion>(R)) {
-    // FIXME: Unsupported yet.
-    SR = 0;
-    return UnknownVal();
+    const StringLiteral* Str = SR->getStringLiteral();
+    return NonLoc::MakeVal(getBasicVals(), Str->getByteLength(), false);
   }
 
   if (const AnonTypedRegion* ATR = dyn_cast<AnonTypedRegion>(R)) {
diff --git a/lib/Analysis/SVals.cpp b/lib/Analysis/SVals.cpp
index 764a05f..0210729 100644
--- a/lib/Analysis/SVals.cpp
+++ b/lib/Analysis/SVals.cpp
@@ -242,6 +242,11 @@
 //===----------------------------------------------------------------------===//
 // Utility methods for constructing Non-Locs.
 //===----------------------------------------------------------------------===//
+NonLoc NonLoc::MakeVal(BasicValueFactory& BasicVals, unsigned X, 
+                       bool isUnsigned) {
+  return nonloc::ConcreteInt(BasicVals.getValue(X, sizeof(unsigned)*8, 
+                                                isUnsigned));
+}
 
 NonLoc NonLoc::MakeVal(BasicValueFactory& BasicVals, uint64_t X, QualType T) {  
   return nonloc::ConcreteInt(BasicVals.getValue(X, T));