diff options
author | Anna Zaks <ganna@apple.com> | 2013-02-06 00:01:14 +0000 |
---|---|---|
committer | Anna Zaks <ganna@apple.com> | 2013-02-06 00:01:14 +0000 |
commit | 258f9357ef613372d5b5f96d0a9f7f98173dbc3e (patch) | |
tree | f7869e8d95e3b4ba5627e9edb3a74bdea94cd99d /clang/test/Analysis/malloc.c | |
parent | ae89a0fbc24aa7cdc1c35aa1b55d3685f7067f4a (diff) | |
download | bcm5719-llvm-258f9357ef613372d5b5f96d0a9f7f98173dbc3e.tar.gz bcm5719-llvm-258f9357ef613372d5b5f96d0a9f7f98173dbc3e.zip |
[analyzer]Revert part of r161511; suppresses leak false positives in C++
This is a "quick fix".
The underlining issue is that when a const pointer to a struct is passed
into a function, we do not invalidate the pointer fields. This results
in false positives that are common in C++ (since copy constructors are
prevalent). (Silences two llvm false positives.)
llvm-svn: 174468
Diffstat (limited to 'clang/test/Analysis/malloc.c')
-rw-r--r-- | clang/test/Analysis/malloc.c | 40 |
1 files changed, 22 insertions, 18 deletions
diff --git a/clang/test/Analysis/malloc.c b/clang/test/Analysis/malloc.c index 3e5f914e9d9..ed2d8e9d50a 100644 --- a/clang/test/Analysis/malloc.c +++ b/clang/test/Analysis/malloc.c @@ -530,12 +530,6 @@ int *testMalloc3() { return y; // no-warning } -void testStructLeak() { - StructWithPtr St; - St.memP = malloc(12); - return; // expected-warning {{Memory is never released; potential leak of memory pointed to by 'St.memP'}} -} - void testElemRegion1() { char *x = (void*)malloc(2); int *ix = (int*)x; @@ -934,18 +928,6 @@ int cmpHeapAllocationToUnknown() { return 0; } -void localArrayTest() { - char *p = (char*)malloc(12); - char *ArrayL[12]; - ArrayL[0] = p; -} // expected-warning {{leak}} - -void localStructTest() { - StructWithPtr St; - StructWithPtr *pSt = &St; - pSt->memP = malloc(12); -} // expected-warning{{Memory is never released; potential leak}} - #ifdef __INTPTR_TYPE__ // Test double assignment through integers. typedef __INTPTR_TYPE__ intptr_t; @@ -1053,3 +1035,25 @@ void testMallocWithParam(int **p) { void testMallocWithParam_2(int **p) { *p = (int*) malloc(sizeof(int)); } + +// Pending on removal of the escaping on assignment to struct fields. +void testStructLeak() { + StructWithPtr St; + St.memP = malloc(12); + return; // missing warning +} + +void localArrayTest() { + char *p = (char*)malloc(12); + char *ArrayL[12]; + ArrayL[0] = p; +} // missing warning + +void localStructTest() { + StructWithPtr St; + StructWithPtr *pSt = &St; + pSt->memP = malloc(12); +} // missing warning + + + |