xref: /aosp_15_r20/external/clang/test/SemaCXX/unreachable-code.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
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 Li int 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 Li int 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 Li void 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 Li void 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 Li int 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