summaryrefslogtreecommitdiffstats
path: root/clang/test/Sema/uninit-variables.c
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2012-09-12 05:53:43 +0000
committerTed Kremenek <kremenek@apple.com>2012-09-12 05:53:43 +0000
commit7979ccf35aa987ea49c77a96a2af3b871a88b0f3 (patch)
tree9dd7c51da6d9b3d8700ee2698a55984753866ff2 /clang/test/Sema/uninit-variables.c
parentb8cae9fddf12d843e8cb0ec29d84b0b270b4729b (diff)
downloadbcm5719-llvm-7979ccf35aa987ea49c77a96a2af3b871a88b0f3.tar.gz
bcm5719-llvm-7979ccf35aa987ea49c77a96a2af3b871a88b0f3.zip
Teach -Wuninitialized to recognize __attribute__((analyzer_noreturn))
for halting the propagation of uninitialized value tracking along a path. Unlike __attribute__((noreturn)), this attribute (which is used by clients of the static analyzer) can be used to annotate functions that essentially never return, but in rare cares may be allowed to return for (special) debugging purposes. This attribute has been shown in reducing false positives in the static analyzer by pruning false postives, and is equally applicable here. Handling this attribute in the CFG itself is another option, but this is not something all clients (e.g., possibly -Wunreachable-code) would want to see. Addresses <rdar://problem/12281583>. llvm-svn: 163681
Diffstat (limited to 'clang/test/Sema/uninit-variables.c')
-rw-r--r--clang/test/Sema/uninit-variables.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/clang/test/Sema/uninit-variables.c b/clang/test/Sema/uninit-variables.c
index 634ae0dc428..9e3dd9d2875 100644
--- a/clang/test/Sema/uninit-variables.c
+++ b/clang/test/Sema/uninit-variables.c
@@ -508,3 +508,26 @@ int self_init_in_cond(int *p) {
int n = ((p && (0 || 1)) && (n = *p)) ? n : -1; // ok
return n;
}
+
+void test_analyzer_noreturn_aux() __attribute__((analyzer_noreturn));
+
+void test_analyzer_noreturn(int y) {
+ int x; // expected-note {{initialize the variable 'x' to silence this warning}}
+ if (y) {
+ test_analyzer_noreturn_aux();
+ ++x; // no-warning
+ }
+ else {
+ ++x; // expected-warning {{variable 'x' is uninitialized when used here}}
+ }
+}
+void test_analyzer_noreturn_2(int y) {
+ int x;
+ if (y) {
+ test_analyzer_noreturn_aux();
+ }
+ else {
+ x = 1;
+ }
+ ++x; // no-warning
+}
OpenPOWER on IntegriCloud