| // RUN: %clang_cc1 -x c -fsyntax-only -verify %s |
| // RUN: %clang_cc1 -std=c++17 -fsyntax-only -verify -Wall -Wno-unused -Wno-misleading-indentation -DCXX17 %s |
| // RUN: %clang_cc1 -x c -fsyntax-only -verify -Wmisleading-indentation -DWITH_WARN -ftabstop 8 -DTAB_SIZE=8 %s |
| // RUN: %clang_cc1 -std=c++17 -fsyntax-only -verify -Wall -Wno-unused -DWITH_WARN -ftabstop 4 -DTAB_SIZE=4 -DCXX17 %s |
| // RUN: %clang_cc1 -x c -fsyntax-only -verify -Wall -Wno-unused -DWITH_WARN -ftabstop 1 -DTAB_SIZE=1 %s |
| // RUN: %clang_cc1 -std=c++17 -fsyntax-only -verify -Wall -Wno-unused -Wmisleading-indentation -DCXX17 -DWITH_WARN -ftabstop 2 -DTAB_SIZE=2 %s |
| |
| #ifndef WITH_WARN |
| // expected-no-diagnostics |
| #endif |
| |
| void f0(int i) { |
| if (i) |
| #ifdef WITH_WARN |
| // expected-note@-2 {{here}} |
| #endif |
| i = i + 1; |
| int x = 0; |
| #ifdef WITH_WARN |
| // expected-warning@-2 {{misleading indentation; statement is not part of the previous 'if'}} |
| #endif |
| return; |
| #ifdef CXX17 |
| if constexpr (false) |
| #ifdef WITH_WARN |
| // expected-note@-2 {{here}} |
| #endif |
| i = 0; |
| i += 1; |
| #ifdef WITH_WARN |
| // expected-warning@-2 {{misleading indentation; statement is not part of the previous 'if'}} |
| #endif |
| #endif |
| } |
| |
| void f1(int i) { |
| for (;i;) |
| #ifdef WITH_WARN |
| // expected-note@-2 {{here}} |
| #endif |
| i = i + 1; |
| i *= 2; |
| #ifdef WITH_WARN |
| // expected-warning@-2 {{misleading indentation; statement is not part of the previous 'for'}} |
| #endif |
| return; |
| } |
| |
| void f2(int i) { |
| while (i) |
| #ifdef WITH_WARN |
| // expected-note@-2 {{here}} |
| #endif |
| i = i + 1; i *= 2; |
| #ifdef WITH_WARN |
| // expected-warning@-2 {{misleading indentation; statement is not part of the previous 'while'}} |
| #endif |
| return; |
| } |
| |
| void f3(int i) { |
| if (i) |
| i = i + 1; |
| else |
| #ifdef WITH_WARN |
| // expected-note@-2 {{here}} |
| #endif |
| i *= 2; |
| const int x = 0; |
| #ifdef WITH_WARN |
| // expected-warning@-2 {{misleading indentation; statement is not part of the previous 'else'}} |
| #endif |
| } |
| |
| #ifdef CXX17 |
| struct Range { |
| int *begin() {return nullptr;} |
| int *end() {return nullptr;} |
| }; |
| #endif |
| |
| void f4(int i) { |
| if (i) |
| i *= 2; |
| return; |
| if (i) |
| i *= 2; |
| ; |
| if (i) |
| #ifdef WITH_WARN |
| // expected-note@-2 {{here}} |
| #endif |
| i *= 2; |
| typedef int Int; |
| #ifdef WITH_WARN |
| // expected-warning@-2 {{misleading indentation; statement is not part of the previous 'if'}} |
| #endif |
| #ifdef CXX17 |
| Range R; |
| for (auto e : R) |
| #ifdef WITH_WARN |
| // expected-note@-2 {{here}} |
| #endif |
| i *= 2; |
| using Int2 = int; |
| #ifdef WITH_WARN |
| // expected-warning@-2 {{misleading indentation; statement is not part of the previous 'for'}} |
| #endif |
| #endif |
| } |
| |
| int bar(void); |
| |
| int foo(int* dst) |
| { |
| if (dst) |
| return |
| bar(); |
| if (dst) |
| dst = dst + \ |
| bar(); |
| return 0; |
| } |
| |
| void g(int i) { |
| if (1) |
| i = 2; |
| else |
| if (i == 3) |
| #ifdef WITH_WARN |
| // expected-note@-3 {{here}} |
| #endif |
| i = 4; |
| i = 5; |
| #ifdef WITH_WARN |
| // expected-warning@-2 {{misleading indentation; statement is not part of the previous 'if'}} |
| #endif |
| } |
| |
| // Or this |
| #define TEST i = 5 |
| void g0(int i) { |
| if (1) |
| i = 2; |
| else |
| i = 5; |
| TEST; |
| } |
| |
| void g1(int i) { |
| if (1) |
| i = 2; |
| else if (i == 3) |
| #ifdef WITH_WARN |
| // expected-note@-2 {{here}} |
| #endif |
| i = 4; |
| i = 5; |
| #ifdef WITH_WARN |
| // expected-warning@-2 {{misleading indentation; statement is not part of the previous 'if'}} |
| #endif |
| } |
| |
| void g2(int i) { |
| if (1) |
| i = 2; |
| else |
| if (i == 3) |
| {i = 4;} |
| i = 5; |
| } |
| |
| void g6(int i) { |
| if (1) |
| if (i == 3) |
| #ifdef WITH_WARN |
| // expected-note@-2 {{here}} |
| #endif |
| i = 4; |
| i = 5; |
| #ifdef WITH_WARN |
| // expected-warning@-2 {{misleading indentation; statement is not part of the previous 'if'}} |
| #endif |
| } |
| |
| void g7(int i) { |
| if (1) |
| i = 4; |
| #ifdef TEST1 |
| #endif |
| i = 5; |
| } |
| |
| void a1(int i) { if (1) i = 4; return; } |
| |
| void a2(int i) { |
| { |
| if (1) |
| i = 4; |
| } |
| return; |
| } |
| |
| void a3(int i) { |
| if (1) |
| { |
| i = 4; |
| } |
| return; |
| } |
| |
| void s(int num) { |
| { |
| if (1) |
| return; |
| else |
| return; |
| return; |
| } |
| if (0) |
| #ifdef WITH_WARN |
| // expected-note@-2 {{here}} |
| #endif |
| return; |
| return; |
| #ifdef WITH_WARN |
| // expected-warning@-2 {{misleading indentation; statement is not part of the previous 'if'}} |
| #endif |
| } |
| int a4() |
| { |
| if (0) |
| return 1; |
| return 0; |
| #if (TAB_SIZE == 1) |
| // expected-warning@-2 {{misleading indentation; statement is not part of the previous 'if'}} |
| // expected-note@-5 {{here}} |
| #endif |
| } |
| |
| int a5() |
| { |
| if (0) |
| return 1; |
| return 0; |
| #if WITH_WARN |
| // expected-warning@-2 {{misleading indentation; statement is not part of the previous 'if'}} |
| // expected-note@-5 {{here}} |
| #endif |
| } |
| |
| int a6() |
| { |
| if (0) |
| return 1; |
| return 0; |
| #if (TAB_SIZE == 8) |
| // expected-warning@-2 {{misleading indentation; statement is not part of the previous 'if'}} |
| // expected-note@-5 {{here}} |
| #endif |
| } |
| |
| #define FOO \ |
| goto fail |
| |
| int main(int argc, char* argv[]) { |
| if (5 != 0) |
| goto fail; |
| else |
| goto fail; |
| |
| if (1) { |
| if (1) |
| goto fail; |
| else if (1) |
| goto fail; |
| else if (1) |
| goto fail; |
| else |
| goto fail; |
| } else if (1) { |
| if (1) |
| goto fail; |
| } |
| |
| if (1) { |
| if (1) |
| goto fail; |
| } else if (1) |
| goto fail; |
| |
| |
| if (1) goto fail; goto fail; |
| |
| if (0) |
| goto fail; |
| |
| goto fail; |
| |
| if (0) |
| FOO; |
| |
| goto fail; |
| |
| fail:; |
| } |
| |
| void f_label(int b) { |
| if (b) |
| return; |
| a: |
| return; |
| goto a; |
| } |