aboutsummaryrefslogtreecommitdiff
path: root/test/Analysis/malloc-annotations.c
diff options
context:
space:
mode:
authorJordan Rose <jordan_rose@apple.com>2013-03-20 20:35:57 +0000
committerJordan Rose <jordan_rose@apple.com>2013-03-20 20:35:57 +0000
commit74f6982232c25ae723b1cc5abc59665a10867f21 (patch)
tree27cee3d374fd9afb0ce97822d11a0692d2fcd519 /test/Analysis/malloc-annotations.c
parentf8ddc098981d4d85cad4e72fc6dfcfe83b842b66 (diff)
[analyzer] Track malloc'd memory into struct fields.
Due to improper modelling of copy constructors (specifically, their const reference arguments), we were producing spurious leak warnings for allocated memory stored in structs. In order to silence this, we decided to consider storing into a struct to be the same as escaping. However, the previous commit has fixed this issue and we can now properly distinguish leaked memory that happens to be in a struct from a buffer that escapes within a struct wrapper. Originally applied in r161511, reverted in r174468. <rdar://problem/12945937> git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@177571 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Analysis/malloc-annotations.c')
-rw-r--r--test/Analysis/malloc-annotations.c16
1 files changed, 5 insertions, 11 deletions
diff --git a/test/Analysis/malloc-annotations.c b/test/Analysis/malloc-annotations.c
index bdd50c6be5..3a260c3aef 100644
--- a/test/Analysis/malloc-annotations.c
+++ b/test/Analysis/malloc-annotations.c
@@ -70,6 +70,11 @@ void af1_c() {
myglobalpointer = my_malloc(12); // no-warning
}
+void af1_d() {
+ struct stuff mystuff;
+ mystuff.somefield = my_malloc(12);
+} // expected-warning{{Memory is never released; potential leak}}
+
// Test that we can pass out allocated memory via pointer-to-pointer.
void af1_e(void **pp) {
*pp = my_malloc(42); // no-warning
@@ -262,14 +267,3 @@ void testMultipleFreeAnnotations() {
my_freeBoth(p, q);
}
-// ----------------------------------------------------------------------------
-
-// False negatives.
-
-// Pending on removal of the escaping on assignment to struct fields.
-void af1_d() {
- struct stuff mystuff;
- mystuff.somefield = my_malloc(12);
-} // missing warning
-
-