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;
 | 
						|
}
 |