summaryrefslogtreecommitdiffstats
path: root/clang/test/Analysis/malloc-interprocedural.c
diff options
context:
space:
mode:
authorJordan Rose <jordan_rose@apple.com>2012-11-15 19:11:43 +0000
committerJordan Rose <jordan_rose@apple.com>2012-11-15 19:11:43 +0000
commite37ab50a6ea6e5f6e8de81bcdd3381a882d5903b (patch)
tree4779386d961e8e1fef0bc5b63b2058326b9017ef /clang/test/Analysis/malloc-interprocedural.c
parentb9263cf1129973f5cc94c91016dbb415d22870e7 (diff)
downloadbcm5719-llvm-e37ab50a6ea6e5f6e8de81bcdd3381a882d5903b.tar.gz
bcm5719-llvm-e37ab50a6ea6e5f6e8de81bcdd3381a882d5903b.zip
[analyzer] Report leaks at the closing brace of a function body.
This fixes a few cases where we'd emit path notes like this: +---+ 1| v p = malloc(len); ^ |2 +---+ In general this should make path notes more consistent and more correct, especially in cases where the leak happens on the false branch of an if that jumps directly to the end of the function. There are a couple places where the leak is reported farther away from the cause; these are usually cases where there are several levels of nested braces before the end of the function. This still matches our current behavior for when there /is/ a statement after all the braces, though. llvm-svn: 168070
Diffstat (limited to 'clang/test/Analysis/malloc-interprocedural.c')
-rw-r--r--clang/test/Analysis/malloc-interprocedural.c20
1 files changed, 12 insertions, 8 deletions
diff --git a/clang/test/Analysis/malloc-interprocedural.c b/clang/test/Analysis/malloc-interprocedural.c
index 79cbf247dd9..3c7bab6717c 100644
--- a/clang/test/Analysis/malloc-interprocedural.c
+++ b/clang/test/Analysis/malloc-interprocedural.c
@@ -31,8 +31,8 @@ static void my_free1(void *p) {
static void test1() {
void *data = 0;
- my_malloc1(&data, 4); // expected-warning {{Memory is never released; potential leak of memory pointed to by 'data'}}
-}
+ my_malloc1(&data, 4);
+} // expected-warning {{Memory is never released; potential leak of memory pointed to by 'data'}}
static void test11() {
void *data = 0;
@@ -44,8 +44,8 @@ static void testUniqueingByallocationSiteInTopLevelFunction() {
void *data = my_malloc2(1, 4);
data = 0;
int x = 5;// expected-warning {{Memory is never released; potential leak of memory pointed to by 'data'}}
- data = my_malloc2(1, 4);// expected-warning {{Memory is never released; potential leak of memory pointed to by 'data'}}
-}
+ data = my_malloc2(1, 4);
+} // expected-warning {{Memory is never released; potential leak of memory pointed to by 'data'}}
static void test3() {
void *data = my_malloc2(1, 4);
@@ -122,10 +122,14 @@ char *strndup(const char *str, size_t n) {
}
void useStrndup(size_t n) {
- if (n == 0)
+ if (n == 0) {
(void)strndup(0, 20); // no-warning
- else if (n < 5)
+ return;
+ } else if (n < 5) {
(void)strndup("hi there", n); // no-warning
- else
- (void)strndup("hi there", n); // expected-warning{{leak}}
+ return;
+ } else {
+ (void)strndup("hi there", n);
+ return; // expected-warning{{leak}}
+ }
}
OpenPOWER on IntegriCloud