blob: 366767629d2da678d02f9c1247fffa50fd9aa907 [file] [log] [blame]
Stephen Hines651f13c2014-04-23 16:59:28 -07001// RUN: %clang %s -fsyntax-only -Xclang -verify -fblocks -Wunreachable-code-aggressive -Wno-unused-value -Wno-covered-switch-default
Ted Kremenek8e282c32012-03-06 23:40:47 +00002
3// This previously triggered a warning from -Wunreachable-code because of
4// a busted CFG.
5typedef signed char BOOL;
6BOOL radar10989084() {
7 @autoreleasepool { // no-warning
8 return __objc_yes;
9 }
10}
11
12// Test the warning works.
13void test_unreachable() {
14 return;
15 return; // expected-warning {{will never be executed}}
16}
17
Stephen Hines651f13c2014-04-23 16:59:28 -070018#define NO __objc_no
19#define YES __objc_yes
20#define CONFIG NO
21
22// Test that 'NO' and 'YES' are not treated as configuration macros.
23int test_NO() {
24 if (NO)
25 return 1; // expected-warning {{will never be executed}}
26 else
27 return 0;
28}
29
30int test_YES() {
31 if (YES)
32 return 1;
33 else
34 return 0; // expected-warning {{will never be executed}}
35}
36
37int test_CONFIG() {
38 if (CONFIG)
39 return 1;
40 else
41 return 0;
42}
43
44// FIXME: This should at some point report a warning
45// that the loop increment is unreachable.
46void test_loop_increment(id container) {
47 for (id x in container) { // no-warning
48 break;
49 }
50}
51
52void calledFun() {}
53
54// Test "silencing" with parentheses.
55void test_with_paren_silencing(int x) {
56 if (NO) calledFun(); // expected-warning {{will never be executed}} expected-note {{silence by adding parentheses to mark code as explicitly dead}}
57 if ((NO)) calledFun(); // no-warning
58
59 if (YES) // expected-note {{silence by adding parentheses to mark code as explicitly dead}}
60 calledFun();
61 else
62 calledFun(); // expected-warning {{will never be executed}}
63
64 if ((YES))
65 calledFun();
66 else
67 calledFun(); // no-warning
68
69 if (!YES) // expected-note {{silence by adding parentheses to mark code as explicitly dead}}
70 calledFun(); // expected-warning {{code will never be executed}}
71 else
72 calledFun();
73
74 if ((!YES))
75 calledFun(); // no-warning
76 else
77 calledFun();
78
79 if (!(YES))
80 calledFun(); // no-warning
81 else
82 calledFun();
83}
84