summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
Diffstat (limited to 'clang')
-rw-r--r--clang/lib/Analysis/SVals.cpp4
-rw-r--r--clang/test/Analysis/NSString-failed-cases.m9
-rw-r--r--clang/test/Analysis/NSString.m8
3 files changed, 12 insertions, 9 deletions
diff --git a/clang/lib/Analysis/SVals.cpp b/clang/lib/Analysis/SVals.cpp
index 9163b272527..fbdb73b0ef2 100644
--- a/clang/lib/Analysis/SVals.cpp
+++ b/clang/lib/Analysis/SVals.cpp
@@ -97,6 +97,10 @@ const MemRegion *SVal::getAsRegion() const {
if (const loc::MemRegionVal *X = dyn_cast<loc::MemRegionVal>(this))
return X->getRegion();
+ if (const nonloc::LocAsInteger *X = dyn_cast<nonloc::LocAsInteger>(this)) {
+ return X->getLoc().getAsRegion();
+ }
+
return 0;
}
diff --git a/clang/test/Analysis/NSString-failed-cases.m b/clang/test/Analysis/NSString-failed-cases.m
index 2b8242f0d01..699d142eecb 100644
--- a/clang/test/Analysis/NSString-failed-cases.m
+++ b/clang/test/Analysis/NSString-failed-cases.m
@@ -97,15 +97,6 @@ extern void *_NSConstantStringClassReference;
//===----------------------------------------------------------------------===//
// FIXME: THIS TEST CASE INCORRECTLY REPORTS A LEAK.
-void testOSCompareAndSwapXXBarrier_parameter(NSString **old) {
- NSString *s = [[NSString alloc] init]; // no-warning
- if (!COMPARE_SWAP_BARRIER((intptr_t) 0, (intptr_t) s, (intptr_t*) old))
- [s release];
- else
- [*old release];
-}
-
-// FIXME: THIS TEST CASE INCORRECTLY REPORTS A LEAK.
void testOSCompareAndSwapXXBarrier_parameter_no_direct_release(NSString **old) {
NSString *s = [[NSString alloc] init]; // no-warning
if (!COMPARE_SWAP_BARRIER((intptr_t) 0, (intptr_t) s, (intptr_t*) old))
diff --git a/clang/test/Analysis/NSString.m b/clang/test/Analysis/NSString.m
index fb44309b124..b5d510a5ed9 100644
--- a/clang/test/Analysis/NSString.m
+++ b/clang/test/Analysis/NSString.m
@@ -388,3 +388,11 @@ void test_synchronized(id x) {
}
}
@end
+
+void testOSCompareAndSwapXXBarrier_parameter(NSString **old) {
+ NSString *s = [[NSString alloc] init]; // no-warning
+ if (!COMPARE_SWAP_BARRIER((intptr_t) 0, (intptr_t) s, (intptr_t*) old))
+ [s release];
+ else
+ [*old release];
+}
OpenPOWER on IntegriCloud