| // RUN: %clang_cc1 -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 |
| } |
| } |