diff options
author | Anna Zaks <ganna@apple.com> | 2012-09-12 22:57:30 +0000 |
---|---|---|
committer | Anna Zaks <ganna@apple.com> | 2012-09-12 22:57:30 +0000 |
commit | 522fc21f3adc647817edc8017e6928a64c96899b (patch) | |
tree | 58cb3520520b25a193a6708523574a0b7913abc5 /lib/StaticAnalyzer/Core/MemRegion.cpp | |
parent | 1a7bcc41efb73d80fd45eb71494b073f388d333c (diff) |
[analyzer] Teach UndefOrNullArgVisitor to track parent regions.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163748 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/StaticAnalyzer/Core/MemRegion.cpp')
-rw-r--r-- | lib/StaticAnalyzer/Core/MemRegion.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/lib/StaticAnalyzer/Core/MemRegion.cpp b/lib/StaticAnalyzer/Core/MemRegion.cpp index b29327efcf..6d6bb20818 100644 --- a/lib/StaticAnalyzer/Core/MemRegion.cpp +++ b/lib/StaticAnalyzer/Core/MemRegion.cpp @@ -990,6 +990,26 @@ const MemRegion *MemRegion::getBaseRegion() const { return R; } +bool MemRegion::isSubRegionOf(const MemRegion *PR) const { + const MemRegion *R = this; + while (true) { + switch (R->getKind()) { + case MemRegion::ElementRegionKind: + case MemRegion::FieldRegionKind: + case MemRegion::ObjCIvarRegionKind: + case MemRegion::CXXBaseObjectRegionKind: + R = cast<SubRegion>(R)->getSuperRegion(); + if (R == PR) + return true; + continue; + default: + break; + } + break; + } + return false; +} + //===----------------------------------------------------------------------===// // View handling. //===----------------------------------------------------------------------===// |