133 lines · cpp
1// RUN: %clang_cc1 -std=c++17 -fcxx-exceptions -fexceptions -fsyntax-only -Wunreachable-code-aggressive -fblocks -verify %s2 3int j;4int bar();5int test1() {6 for (int i = 0;7 i != 10;8 ++i) { // expected-warning {{loop will run at most once (loop increment never executed)}}9 if (j == 23) // missing {}'s10 bar();11 return 1;12 }13 return 0;14 return 1; // expected-warning {{will never be executed}}15}16 17int test1_B() {18 for (int i = 0;19 i != 10;20 ++i) { // expected-warning {{loop will run at most once (loop increment never executed)}}21 if (j == 23) // missing {}'s22 bar();23 return 1;24 }25 return 0;26 return bar(); // expected-warning {{will never be executed}}27}28 29void test2(int i) {30 switch (i) {31 case 0:32 break;33 bar(); // expected-warning {{will never be executed}}34 case 2:35 switch (i) {36 default:37 a: goto a;38 }39 bar(); // expected-warning {{will never be executed}}40 }41 b: goto b;42 bar(); // expected-warning {{will never be executed}}43}44 45void test3() {46 ^{ return;47 bar(); // expected-warning {{will never be executed}}48 }();49 while (++j) {50 continue;51 bar(); // expected-warning {{will never be executed}}52 }53}54 55// PR 6130 - Don't warn about bogus unreachable code with throw's and56// temporary objects.57class PR6130 {58public:59 PR6130();60 ~PR6130();61};62 63int pr6130(unsigned i) {64 switch(i) {65 case 0: return 1;66 case 1: return 2;67 default:68 throw PR6130(); // no-warning69 }70}71 72extern "C" void foo(void);73extern "C" __attribute__((weak)) decltype(foo) foo;74 75void weak_redecl() {76 if (foo)77 return;78 bar(); // no-warning79}80 81namespace pr52103 {82 83void g(int a);84 85void f(int a) {86 if (a > 4) [[ likely ]] { // no-warning87 return;88 }89 90 if (a > 4) [[ unlikely ]] { // no-warning91 return;92 93 return; // expected-warning {{will never be executed}}94 }95 96 [[clang::musttail]] return g(a); // no-warning97 98 [[clang::musttail]] return g(a); // expected-warning {{will never be executed}}99}100 101}102 103namespace gh57123 {104 bool foo() {105 if constexpr (true) {106 if (true)107 return true;108 else109 return false; // expected-warning {{will never be executed}}110 }111 else112 return false; // no-warning113 }114 115 bool bar() {116 if (true)117 return true;118 else119 return false; // expected-warning {{will never be executed}}120 }121 122 bool baz() {123 if constexpr (true)124 return true;125 else {126 if (true)127 return true;128 else129 return false; // expected-warning {{will never be executed}}130 }131 }132}133