forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			315 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			315 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			C++
		
	
	
	
| // 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;
 | |
| }
 |