diff options
author | Zhongxing Xu <xuzhongxing@gmail.com> | 2008-11-24 02:18:56 +0000 |
---|---|---|
committer | Zhongxing Xu <xuzhongxing@gmail.com> | 2008-11-24 02:18:56 +0000 |
commit | 6613d08a19aa6ce9b6330487f3bfac841d4b8a4d (patch) | |
tree | 88def2c7b5eaae7a26d0b4099038f0ea87729615 /lib | |
parent | 0947b4e6c778ca94bbd0a56548de0b6b5ff1dfc9 (diff) |
Add getSize() support for StringRegion.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59930 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Analysis/RegionStore.cpp | 5 | ||||
-rw-r--r-- | lib/Analysis/SVals.cpp | 5 |
2 files changed, 7 insertions, 3 deletions
diff --git a/lib/Analysis/RegionStore.cpp b/lib/Analysis/RegionStore.cpp index 05d311df89..cdc8b2723d 100644 --- a/lib/Analysis/RegionStore.cpp +++ b/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/lib/Analysis/SVals.cpp b/lib/Analysis/SVals.cpp index 764a05fe8f..0210729b46 100644 --- a/lib/Analysis/SVals.cpp +++ b/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)); |