1 // RUN: %clang %s -fsyntax-only -Xclang -verify -fblocks -Wunreachable-code-aggressive -Wno-unused-value -Wno-covered-switch-default 2 3 // This previously triggered a warning from -Wunreachable-code because of 4 // a busted CFG. 5 typedef signed char BOOL; 6 BOOL radar10989084() { 7 @autoreleasepool { // no-warning 8 return __objc_yes; 9 } 10 } 11 12 // Test the warning works. 13 void test_unreachable() { 14 return; 15 return; // expected-warning {{will never be executed}} 16 } 17 18 #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. 23 int test_NO() { 24 if (NO) 25 return 1; // expected-warning {{will never be executed}} 26 else 27 return 0; 28 } 29 30 int test_YES() { 31 if (YES) 32 return 1; 33 else 34 return 0; // expected-warning {{will never be executed}} 35 } 36 37 int 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. 46 void test_loop_increment(id container) { 47 for (id x in container) { // no-warning 48 break; 49 } 50 } 51 52 void calledFun() {} 53 54 // Test "silencing" with parentheses. 55 void 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 85