warn-unreachable.c revision 31ceb61172bca7ebc3fb90e9125864c7a29c55c0
1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// RUN: %clang %s -fsyntax-only -Xclang -verify -fblocks -Wunreachable-code -Wno-unused-value -Wno-switch-enum-redundant-default 2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 3116680a4aac90f2aa7413d9095a592090648e557Ben Murdochint halt() __attribute__((noreturn)); 4116680a4aac90f2aa7413d9095a592090648e557Ben Murdochint live(); 56e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)int dead(); 6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 7116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid test1() { 8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch goto c; 9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch d: 10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch goto e; // expected-warning {{will never be executed}} 11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch c: ; 12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int i; 13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return; 14116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch goto b; // expected-warning {{will never be executed}} 15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch goto a; // expected-warning {{will never be executed}} 16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch b: 17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch i = 1; 18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch a: 19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch i = 2; 20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch goto f; 21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch e: 22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch goto d; 23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch f: ; 24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void test2() { 27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int i; 28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch switch (live()) { 296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) case 1: 30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch halt(), 31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch dead(); // expected-warning {{will never be executed}} 326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) case 2: 346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) live(), halt(), 355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) dead(); // expected-warning {{will never be executed}} 365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) case 3: 385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) live() 39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch + // expected-warning {{will never be executed}} 40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch halt(); 41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch dead(); 42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch case 4: 44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch a4: 45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch live(), 46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch halt(); 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci goto a4; // expected-warning {{will never be executed}} 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch case 5: 50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch goto a5; 51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch c5: 526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) dead(); // expected-warning {{will never be executed}} 53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch goto b5; 54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch a5: 55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch live(), 56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch halt(); 576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) b5: 58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch goto c5; 595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch case 6: 61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (live()) 62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch goto e6; 636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) live(), 646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) halt(); 656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) d6: 665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) dead(); // expected-warning {{will never be executed}} 675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) goto b6; 685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) c6: 69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch dead(); 70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch goto b6; 71 e6: 72 live(), 73 halt(); 74 b6: 75 goto c6; 76 case 7: 77 halt() 78 + 79 dead(); // expected-warning {{will never be executed}} 80 - // expected-warning {{will never be executed}} 81 halt(); 82 case 8: 83 i // expected-warning {{will never be executed}} 84 += 85 halt(); 86 case 9: 87 halt() 88 ? // expected-warning {{will never be executed}} 89 dead() : dead(); 90 case 10: 91 ( // expected-warning {{will never be executed}} 92 float)halt(); 93 case 11: { 94 int a[5]; 95 live(), 96 a[halt() // expected-warning {{will never be executed}} 97 ]; 98 } 99 } 100} 101 102enum Cases { C1, C2, C3 }; 103int test_enum_cases(enum Cases C) { 104 switch (C) { 105 case C1: 106 case C2: 107 case C3: 108 return 1; 109 default: { 110 int i = 0; // expected-warning{{will never be executed}} 111 ++i; 112 return i; 113 } 114 } 115} 116 117// Handle unreachable code triggered by macro expansions. 118void __myassert_rtn(const char *, const char *, int, const char *) __attribute__((__noreturn__)); 119 120#define myassert(e) \ 121 (__builtin_expect(!(e), 0) ? __myassert_rtn(__func__, __FILE__, __LINE__, #e) : (void)0) 122 123void test_assert() { 124 myassert(0 && "unreachable"); 125 return; // no-warning 126} 127 128// Test case for PR 9774. Tests that dead code in macros aren't warned about. 129#define MY_MAX(a,b) ((a) >= (b) ? (a) : (b)) 130void PR9774(int *s) { 131 for (int i = 0; i < MY_MAX(2, 3); i++) // no-warning 132 s[i] = 0; 133} 134 135