summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorZhongxing Xu <xuzhongxing@gmail.com>2008-11-24 02:18:56 +0000
committerZhongxing Xu <xuzhongxing@gmail.com>2008-11-24 02:18:56 +0000
commita61731dd0d7d01a1392642cfa29b8baf08ccdd35 (patch)
treee978f56840abee95364157835187b186d822c259 /clang/lib
parent35a70ec1311a7b6211a541cd850cb958e1b3d9f6 (diff)
downloadbcm5719-llvm-a61731dd0d7d01a1392642cfa29b8baf08ccdd35.tar.gz
bcm5719-llvm-a61731dd0d7d01a1392642cfa29b8baf08ccdd35.zip
Add getSize() support for StringRegion.
llvm-svn: 59930
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/Analysis/RegionStore.cpp5
-rw-r--r--clang/lib/Analysis/SVals.cpp5
2 files changed, 7 insertions, 3 deletions
diff --git a/clang/lib/Analysis/RegionStore.cpp b/clang/lib/Analysis/RegionStore.cpp
index 05d311df899..cdc8b2723d1 100644
--- a/clang/lib/Analysis/RegionStore.cpp
+++ b/clang/lib/Analysis/RegionStore.cpp
@@ -272,9 +272,8 @@ SVal RegionStoreManager::getSizeInElements(const GRState* St,
}
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/clang/lib/Analysis/SVals.cpp b/clang/lib/Analysis/SVals.cpp
index 764a05fe8f0..0210729b469 100644
--- a/clang/lib/Analysis/SVals.cpp
+++ b/clang/lib/Analysis/SVals.cpp
@@ -242,6 +242,11 @@ NonLoc Loc::NE(BasicValueFactory& BasicVals, const Loc& R) const {
//===----------------------------------------------------------------------===//
// 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));
OpenPOWER on IntegriCloud