// RUN: %check_clang_tidy %s bugprone-suspicious-semicolon %t

int x = 5;

void nop();

void correct1()
{
	if(x < 5) nop();
}

void correct2()
{
	if(x == 5)
		nop();
}

void correct3()
{
	if(x > 5)
	{
		nop();
	}
}

void fail1()
{
  if(x > 5); nop();
  // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: potentially unintended semicolon [bugprone-suspicious-semicolon]
  // CHECK-FIXES: if(x > 5) nop();
}

void fail2()
{
	if(x == 5);
		nop();
  // CHECK-MESSAGES: :[[@LINE-2]]:12: warning: potentially unintended semicolon [bugprone-suspicious-semicolon]
  // CHECK-FIXES: if(x == 5){{$}}
}

void fail3()
{
	if(x < 5);
	{
		nop();
	}
  // CHECK-MESSAGES: :[[@LINE-4]]:11: warning: potentially unintended semicolon
  // CHECK-FIXES: if(x < 5){{$}}
}

void correct4()
{
  while(x % 5 == 1);
  nop();
}

void correct5()
{
	for(int i = 0; i < x; ++i)
		;
}

void fail4()
{
	for(int i = 0; i < x; ++i);
		nop();
  // CHECK-MESSAGES: :[[@LINE-2]]:28: warning: potentially unintended semicolon
  // CHECK-FIXES: for(int i = 0; i < x; ++i){{$}}
}

void fail5()
{
	if(x % 5 == 1);
	  nop();
  // CHECK-MESSAGES: :[[@LINE-2]]:16: warning: potentially unintended semicolon
  // CHECK-FIXES: if(x % 5 == 1){{$}}
}

void fail6() {
  int a = 0;
  if (a != 0) {
  } else if (a != 1);
    a = 2;
  // CHECK-MESSAGES: :[[@LINE-2]]:21: warning: potentially unintended semicolon
  // CHECK-FIXES: } else if (a != 1){{$}}
}

void fail7() {
  if (true)
    ;
  // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: potentially unintended semicolon
}

void correct6()
{
	do; while(false);
}

int correct7()
{
  int t_num = 0;
  char c = 'b';
  char *s = "a";
  if (s == "(" || s != "'" || c == '"') {
    t_num += 3;
    return (c == ')' && c == '\'');
  }

  return 0;
}

void correct8() {
  if (true)
    ;
  else {
  }
}
