aboutsummaryrefslogtreecommitdiff
path: root/test/Analysis/malloc-interprocedural.c
diff options
context:
space:
mode:
authorAnna Zaks <ganna@apple.com>2012-02-24 16:49:41 +0000
committerAnna Zaks <ganna@apple.com>2012-02-24 16:49:41 +0000
commite55b03a6e44b99c1cd77b8ea5e4d836c28948904 (patch)
tree9c3aeadd8eb3774e7ced0e6fce0ac9167064c49e /test/Analysis/malloc-interprocedural.c
parenta0889a8c3299b1950e0a2dfa1d1656e5aa60f193 (diff)
[analyzer] We were silently stopping exploring the path after
visiting 'return;' statement! This most likely caused us to skip a bunch of code when analyzing with inlining. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@151368 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Analysis/malloc-interprocedural.c')
-rw-r--r--test/Analysis/malloc-interprocedural.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/test/Analysis/malloc-interprocedural.c b/test/Analysis/malloc-interprocedural.c
index d3a2ea7508..0cdd9fb281 100644
--- a/test/Analysis/malloc-interprocedural.c
+++ b/test/Analysis/malloc-interprocedural.c
@@ -69,3 +69,19 @@ void test5() {
int *data;
my_free1((int*)data);
}
+
+// Test that we keep processing after 'return;'
+void fooWithEmptyReturn(int x) {
+ if (x)
+ return;
+ x++;
+ return;
+}
+
+int uafAndCallsFooWithEmptyReturn() {
+ int *x = (int*)malloc(12);
+ free(x);
+ fooWithEmptyReturn(12);
+ return *x; // expected-warning {{Use of memory after it is freed}}
+}
+