// RUN: %clang_cc1 -std=c++17 -fcxx-exceptions -fexceptions -fsyntax-only -Wunreachable-code-aggressive -fblocks -verify %s int j; int bar(); int test1() { for (int i = 0; i != 10; ++i) { // expected-warning {{loop will run at most once (loop increment never executed)}} if (j == 23) // missing {}'s bar(); return 1; } return 0; return 1; // expected-warning {{will never be executed}} } int test1_B() { for (int i = 0; i != 10; ++i) { // expected-warning {{loop will run at most once (loop increment never executed)}} if (j == 23) // missing {}'s bar(); return 1; } return 0; return bar(); // expected-warning {{will never be executed}} } void test2(int i) { switch (i) { case 0: break; bar(); // expected-warning {{will never be executed}} case 2: switch (i) { default: a: goto a; } bar(); // expected-warning {{will never be executed}} } b: goto b; bar(); // expected-warning {{will never be executed}} } void test3() { ^{ return; bar(); // expected-warning {{will never be executed}} }(); while (++j) { continue; bar(); // expected-warning {{will never be executed}} } } // PR 6130 - Don't warn about bogus unreachable code with throw's and // temporary objects. class PR6130 { public: PR6130(); ~PR6130(); }; int pr6130(unsigned i) { switch(i) { case 0: return 1; case 1: return 2; default: throw PR6130(); // no-warning } } extern "C" void foo(void); extern "C" __attribute__((weak)) decltype(foo) foo; void weak_redecl() { if (foo) return; bar(); // no-warning } namespace pr52103 { void g(int a); void f(int a) { if (a > 4) [[ likely ]] { // no-warning return; } if (a > 4) [[ unlikely ]] { // no-warning return; return; // expected-warning {{will never be executed}} } [[clang::musttail]] return g(a); // no-warning [[clang::musttail]] return g(a); // expected-warning {{will never be executed}} } } namespace gh57123 { bool foo() { if constexpr (true) { if (true) return true; else return false; // expected-warning {{will never be executed}} } else return false; // no-warning } bool bar() { if (true) return true; else return false; // expected-warning {{will never be executed}} } bool baz() { if constexpr (true) return true; else { if (true) return true; else return false; // expected-warning {{will never be executed}} } } }