unreachable-code-path.c revision 5e04bdde8e74d991feffe9cf95d731f7e473dbb7
1// RUN: %clang_cc1 -analyze -analyzer-experimental-checks -analyzer-check-objc-mem -analyzer-check-dead-stores -verify -analyzer-opt-analyze-nested-blocks %s 2 3extern void foo(int a); 4 5void test(unsigned a) { 6 switch (a) { 7 a += 5; // expected-warning{{never executed}} 8 case 2: 9 a *= 10; 10 case 3: 11 a %= 2; 12 } 13 foo(a); 14} 15 16void test2(unsigned a) { 17 help: 18 if (a > 0) 19 return; 20 if (a == 0) 21 return; 22 foo(a); // expected-warning{{never executed}} 23 goto help; 24} 25 26void test3() { 27 int a = 5; 28 29 while (a > 1) 30 a -= 2; 31 32 if (a > 1) { 33 a = a + 56; // expected-warning{{never executed}} 34 } 35 36 foo(a); 37} 38 39void test4(unsigned a) { 40 while(1); 41 if (a > 5) { // expected-warning{{never executed}} 42 return; 43 } 44} 45 46extern void bar(char c); 47 48void test5(const char *c) { 49 foo(c[0]); 50 51 if (!c) { 52 bar(1); // expected-warning{{never executed}} 53 } 54} 55 56void test6(const char *c) { 57 if (c) return; 58 if (!c) return; 59 __builtin_unreachable(); // no-warning 60} 61 62