blob: fd006c099e7dc6b07a7e8efa0b3445b34bd85827 [file] [log] [blame]
Ted Kremenek1a8641c2014-03-15 01:26:32 +00001// RUN: %clang_cc1 -fcxx-exceptions -fexceptions -fsyntax-only -Wunreachable-code-aggressive -fblocks -verify %s
Mike Stump1bacb812010-01-13 02:59:54 +00002
3int j;
Ted Kremenek7549f0f2014-03-06 01:09:45 +00004int bar();
Mike Stump1bacb812010-01-13 02:59:54 +00005int test1() {
6 for (int i = 0;
7 i != 10;
Ted Kremenek14210372014-03-21 06:02:36 +00008 ++i) { // expected-warning {{loop will run at most once (loop increment never executed)}}
Mike Stump1bacb812010-01-13 02:59:54 +00009 if (j == 23) // missing {}'s
10 bar();
11 return 1;
12 }
13 return 0;
Ted Kremenek7549f0f2014-03-06 01:09:45 +000014 return 1; // expected-warning {{will never be executed}}
15}
16
17int test1_B() {
18 for (int i = 0;
19 i != 10;
Ted Kremenek14210372014-03-21 06:02:36 +000020 ++i) { // expected-warning {{loop will run at most once (loop increment never executed)}}
Ted Kremenek7549f0f2014-03-06 01:09:45 +000021 if (j == 23) // missing {}'s
22 bar();
23 return 1;
24 }
25 return 0;
26 return bar(); // expected-warning {{will never be executed}}
Mike Stump1bacb812010-01-13 02:59:54 +000027}
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}
Ted Kremenek82bfc862010-08-28 00:19:02 +000054
55// PR 6130 - Don't warn about bogus unreachable code with throw's and
56// 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-warning
69 }
70}