]> granicus.if.org Git - clang/commitdiff
Add isSubRegionOf() method to SubRegion.
authorZhongxing Xu <xuzhongxing@gmail.com>
Thu, 8 Jan 2009 13:17:14 +0000 (13:17 +0000)
committerZhongxing Xu <xuzhongxing@gmail.com>
Thu, 8 Jan 2009 13:17:14 +0000 (13:17 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@61924 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Analysis/PathSensitive/MemRegion.h
lib/Analysis/MemRegion.cpp

index 40c6fde51ea7f27dfbb037badd01e3ebcb7c2ebb..80efac4dbf011f4a4a3d9d2c6eda6e37e42b10e8 100644 (file)
@@ -100,6 +100,8 @@ public:
     return superRegion;
   }
 
+  bool isSubRegionOf(const MemRegion* R) const;
+
   static bool classof(const MemRegion* R) {
     return R->getKind() > SymbolicRegionKind;
   }
index 8767781354e707e011ff7044c0083c3c09a731df..c1b6ed32d5858d3d51438a6e49e5faf06f82a032 100644 (file)
@@ -21,6 +21,19 @@ using namespace clang;
 
 MemRegion::~MemRegion() {}
 
+bool SubRegion::isSubRegionOf(const MemRegion* R) const {
+  const MemRegion* r = getSuperRegion();
+  while (r != 0) {
+    if (r == R)
+      return true;
+    if (const SubRegion* sr = dyn_cast<SubRegion>(r))
+      r = sr->getSuperRegion();
+    else
+      break;
+  }
+  return false;
+}
+
 void MemSpaceRegion::Profile(llvm::FoldingSetNodeID& ID) const {
   ID.AddInteger((unsigned)getKind());
 }