[cfe-commits] r59930 - in /cfe/trunk: include/clang/Analysis/PathSensitive/MemRegion.h include/clang/Analysis/PathSensitive/SVals.h lib/Analysis/RegionStore.cpp lib/Analysis/SVals.cpp

Zhongxing Xu xuzhongxing at gmail.com
Sun Nov 23 18:18:57 PST 2008


Author: zhongxingxu
Date: Sun Nov 23 20:18:56 2008
New Revision: 59930

URL: http://llvm.org/viewvc/llvm-project?rev=59930&view=rev
Log:
Add getSize() support for StringRegion.

Modified:
    cfe/trunk/include/clang/Analysis/PathSensitive/MemRegion.h
    cfe/trunk/include/clang/Analysis/PathSensitive/SVals.h
    cfe/trunk/lib/Analysis/RegionStore.cpp
    cfe/trunk/lib/Analysis/SVals.cpp

Modified: cfe/trunk/include/clang/Analysis/PathSensitive/MemRegion.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Analysis/PathSensitive/MemRegion.h?rev=59930&r1=59929&r2=59930&view=diff

==============================================================================
--- cfe/trunk/include/clang/Analysis/PathSensitive/MemRegion.h (original)
+++ cfe/trunk/include/clang/Analysis/PathSensitive/MemRegion.h Sun Nov 23 20:18:56 2008
@@ -189,6 +189,9 @@
                             const MemRegion* superRegion);
 
 public:
+
+  const StringLiteral* getStringLiteral() const { return Str; }
+
   QualType getType(ASTContext& C) const {
     return C.getCanonicalType(Str->getType());
   }

Modified: cfe/trunk/include/clang/Analysis/PathSensitive/SVals.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Analysis/PathSensitive/SVals.h?rev=59930&r1=59929&r2=59930&view=diff

==============================================================================
--- cfe/trunk/include/clang/Analysis/PathSensitive/SVals.h (original)
+++ cfe/trunk/include/clang/Analysis/PathSensitive/SVals.h Sun Nov 23 20:18:56 2008
@@ -170,6 +170,10 @@
   void print(llvm::raw_ostream& Out) const;
   
   // Utility methods to create NonLocs.
+
+  static NonLoc MakeVal(BasicValueFactory& BasicVals, unsigned X, 
+                        bool isUnsigned);
+
   static NonLoc MakeVal(BasicValueFactory& BasicVals, uint64_t X, QualType T);
   
   static NonLoc MakeVal(BasicValueFactory& BasicVals, IntegerLiteral* I);

Modified: cfe/trunk/lib/Analysis/RegionStore.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Analysis/RegionStore.cpp?rev=59930&r1=59929&r2=59930&view=diff

==============================================================================
--- cfe/trunk/lib/Analysis/RegionStore.cpp (original)
+++ cfe/trunk/lib/Analysis/RegionStore.cpp Sun Nov 23 20:18:56 2008
@@ -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)) {

Modified: cfe/trunk/lib/Analysis/SVals.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Analysis/SVals.cpp?rev=59930&r1=59929&r2=59930&view=diff

==============================================================================
--- cfe/trunk/lib/Analysis/SVals.cpp (original)
+++ cfe/trunk/lib/Analysis/SVals.cpp Sun Nov 23 20:18:56 2008
@@ -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));





More information about the cfe-commits mailing list