| // RUN: %clang %s -fsyntax-only -Xclang -verify -fblocks -Wunreachable-code -Wno-unused-value |
| |
| int halt() __attribute__((noreturn)); |
| int live(); |
| int dead(); |
| |
| void test1() { |
| goto c; |
| d: |
| goto e; // expected-warning {{will never be executed}} |
| c: ; |
| int i; |
| return; |
| goto b; // expected-warning {{will never be executed}} |
| goto a; // expected-warning {{will never be executed}} |
| b: |
| i = 1; |
| a: |
| i = 2; |
| goto f; |
| e: |
| goto d; |
| f: ; |
| } |
| |
| void test2() { |
| int i; |
| switch (live()) { |
| case 1: |
| halt(), |
| dead(); // expected-warning {{will never be executed}} |
| |
| case 2: |
| live(), halt(), |
| dead(); // expected-warning {{will never be executed}} |
| |
| case 3: |
| live() // expected-warning {{will never be executed}} |
| + |
| halt(); |
| dead(); |
| |
| case 4: |
| a4: |
| live(), |
| halt(); |
| goto a4; // expected-warning {{will never be executed}} |
| |
| case 5: |
| goto a5; |
| c5: |
| dead(); // expected-warning {{will never be executed}} |
| goto b5; |
| a5: |
| live(), |
| halt(); |
| b5: |
| goto c5; |
| |
| case 6: |
| if (live()) |
| goto e6; |
| live(), |
| halt(); |
| d6: |
| dead(); // expected-warning {{will never be executed}} |
| goto b6; |
| c6: |
| dead(); |
| goto b6; |
| e6: |
| live(), |
| halt(); |
| b6: |
| goto c6; |
| case 7: |
| halt() |
| + // expected-warning {{will never be executed}} |
| dead(); |
| - // expected-warning {{will never be executed}} |
| halt(); |
| case 8: |
| i |
| += // expected-warning {{will never be executed}} |
| halt(); |
| case 9: |
| halt() |
| ? // expected-warning {{will never be executed}} |
| dead() : dead(); |
| case 10: |
| ( // expected-warning {{will never be executed}} |
| float)halt(); |
| case 11: { |
| int a[5]; |
| live(), |
| a[halt() |
| ]; // expected-warning {{will never be executed}} |
| } |
| } |
| } |