aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2009-09-24 06:24:32 +0000
committerTed Kremenek <kremenek@apple.com>2009-09-24 06:24:32 +0000
commit35dcad8aeef4fc499ab4f057cf40a5da3cc0ee45 (patch)
tree46b94052470206a59b4f096171b93c198e593210
parentffbdefc7a24c01a0f77425423278774796a3aa53 (diff)
Fix crash in RegionStoreManager::Bind() by using 'getAs<PointerType>()' instead of 'cast<PointerType>()' (to handle pointer typedefs).
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@82686 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Analysis/RegionStore.cpp2
-rw-r--r--test/Analysis/misc-ps-region-store.m3
2 files changed, 3 insertions, 2 deletions
diff --git a/lib/Analysis/RegionStore.cpp b/lib/Analysis/RegionStore.cpp
index 31f52a55b3..75907da55e 100644
--- a/lib/Analysis/RegionStore.cpp
+++ b/lib/Analysis/RegionStore.cpp
@@ -1322,7 +1322,7 @@ const GRState *RegionStoreManager::Bind(const GRState *state, Loc L, SVal V) {
// Binding directly to a symbolic region should be treated as binding
// to element 0.
QualType T = SR->getSymbol()->getType(getContext());
- T = cast<PointerType>(T)->getPointeeType();
+ T = T->getAs<PointerType>()->getPointeeType();
R = GetElementZeroRegion(SR, T);
}
diff --git a/test/Analysis/misc-ps-region-store.m b/test/Analysis/misc-ps-region-store.m
index 569fc790d6..c5be02c821 100644
--- a/test/Analysis/misc-ps-region-store.m
+++ b/test/Analysis/misc-ps-region-store.m
@@ -198,7 +198,8 @@ CGFloat rdar7242006_negative(CGFloat x) {
// <rdar://problem/7249340> - Allow binding of values to symbolic regions.
// This test case shows how RegionStore tracks the value bound to 'x'
// after the assignment.
-void rdar_7249340(int *x) {
+typedef int* ptr_rdar_7249340;
+void rdar_7249340(ptr_rdar_7249340 x) {
*x = 1;
if (*x)
return;