1*67e74705SXin Li // RUN: %clang_cc1 -fcxx-exceptions -fexceptions -fsyntax-only -Wunreachable-code-aggressive -fblocks -verify %s 2*67e74705SXin Li 3*67e74705SXin Li int j; 4*67e74705SXin Li int bar(); test1()5*67e74705SXin Liint test1() { 6*67e74705SXin Li for (int i = 0; 7*67e74705SXin Li i != 10; 8*67e74705SXin Li ++i) { // expected-warning {{loop will run at most once (loop increment never executed)}} 9*67e74705SXin Li if (j == 23) // missing {}'s 10*67e74705SXin Li bar(); 11*67e74705SXin Li return 1; 12*67e74705SXin Li } 13*67e74705SXin Li return 0; 14*67e74705SXin Li return 1; // expected-warning {{will never be executed}} 15*67e74705SXin Li } 16*67e74705SXin Li test1_B()17*67e74705SXin Liint test1_B() { 18*67e74705SXin Li for (int i = 0; 19*67e74705SXin Li i != 10; 20*67e74705SXin Li ++i) { // expected-warning {{loop will run at most once (loop increment never executed)}} 21*67e74705SXin Li if (j == 23) // missing {}'s 22*67e74705SXin Li bar(); 23*67e74705SXin Li return 1; 24*67e74705SXin Li } 25*67e74705SXin Li return 0; 26*67e74705SXin Li return bar(); // expected-warning {{will never be executed}} 27*67e74705SXin Li } 28*67e74705SXin Li test2(int i)29*67e74705SXin Livoid test2(int i) { 30*67e74705SXin Li switch (i) { 31*67e74705SXin Li case 0: 32*67e74705SXin Li break; 33*67e74705SXin Li bar(); // expected-warning {{will never be executed}} 34*67e74705SXin Li case 2: 35*67e74705SXin Li switch (i) { 36*67e74705SXin Li default: 37*67e74705SXin Li a: goto a; 38*67e74705SXin Li } 39*67e74705SXin Li bar(); // expected-warning {{will never be executed}} 40*67e74705SXin Li } 41*67e74705SXin Li b: goto b; 42*67e74705SXin Li bar(); // expected-warning {{will never be executed}} 43*67e74705SXin Li } 44*67e74705SXin Li test3()45*67e74705SXin Livoid test3() { 46*67e74705SXin Li ^{ return; 47*67e74705SXin Li bar(); // expected-warning {{will never be executed}} 48*67e74705SXin Li }(); 49*67e74705SXin Li while (++j) { 50*67e74705SXin Li continue; 51*67e74705SXin Li bar(); // expected-warning {{will never be executed}} 52*67e74705SXin Li } 53*67e74705SXin Li } 54*67e74705SXin Li 55*67e74705SXin Li // PR 6130 - Don't warn about bogus unreachable code with throw's and 56*67e74705SXin Li // temporary objects. 57*67e74705SXin Li class PR6130 { 58*67e74705SXin Li public: 59*67e74705SXin Li PR6130(); 60*67e74705SXin Li ~PR6130(); 61*67e74705SXin Li }; 62*67e74705SXin Li pr6130(unsigned i)63*67e74705SXin Liint pr6130(unsigned i) { 64*67e74705SXin Li switch(i) { 65*67e74705SXin Li case 0: return 1; 66*67e74705SXin Li case 1: return 2; 67*67e74705SXin Li default: 68*67e74705SXin Li throw PR6130(); // no-warning 69*67e74705SXin Li } 70*67e74705SXin Li } 71