// RUN: %clang_cc1 -pedantic -Wunused-label -verify -x c %s
// RUN: cp %s %t
// RUN: not %clang_cc1 -pedantic -Wunused-label -fixit -x c %t
// RUN: grep -v CHECK %t > %t2
// RUN: %clang_cc1 -pedantic -Wunused-label -Werror -x c %t
// RUN: FileCheck -input-file=%t2 %t

/* This is a test of the various code modification hints that are
   provided as part of warning or extension diagnostics. All of the
   warnings will be fixed by -fixit, and the resulting file should
   compile cleanly with -Werror -pedantic. */

// FIXME: FIX-IT should add #include <string.h>?
int strcmp(const char *s1, const char *s2);

void f0(void) { }; // expected-warning {{';'}}

struct s {
  int x, y;; // expected-warning {{extra ';'}}
};

// CHECK: _Complex double cd;
_Complex cd; // expected-warning {{assuming '_Complex double'}}

// CHECK: struct s s0 = { .y = 5 };
struct s s0 = { y: 5 }; // expected-warning {{GNU old-style}}

// CHECK: int array0[5] = { [3] = 3 };
int array0[5] = { [3] 3 }; // expected-warning {{GNU 'missing ='}}

// CHECK: int x
// CHECK: int y
void f1(x, y) // expected-warning 2{{defaulting to type 'int'}}
{
}

int i0 = { 17 };

#define ONE 1
#define TWO 2

int test_cond(int y, int fooBar) { // expected-note {{here}}
// CHECK: int x = y ? 1 : 4+fooBar;
  int x = y ? 1 4+foobar; // expected-error {{expected ':'}} expected-error {{undeclared identifier}} expected-note {{to match}}
// CHECK: x = y ? ONE : TWO;
  x = y ? ONE TWO; // expected-error {{':'}} expected-note {{to match}}
  return x;
}

// CHECK: const typedef int int_t;
const typedef typedef int int_t; // expected-warning {{duplicate 'typedef'}}

// <rdar://problem/7159693>
enum Color { 
  Red // expected-error{{missing ',' between enumerators}}
  Green = 17 // expected-error{{missing ',' between enumerators}}
  Blue,
};

// rdar://9295072
struct test_struct {
  // CHECK: struct test_struct *struct_ptr;
  test_struct *struct_ptr; // expected-error {{must use 'struct' tag to refer to type 'test_struct'}}
};

void removeUnusedLabels(char c) {
  L0 /*removed comment*/:        c++; // expected-warning {{unused label}}
  removeUnusedLabels(c);
  L1: // expected-warning {{unused label}}
  c++;
  /*preserved comment*/ L2  :        c++; // expected-warning {{unused label}}
  LL // expected-warning {{unused label}}
  : c++;
  c = c + 3; L4: return; // expected-warning {{unused label}}
}

int oopsAComma = 0, // expected-error {{';'}}
void oopsMoreCommas() {
  static int a[] = { 0, 1, 2 }, // expected-error {{';'}}
  static int b[] = { 3, 4, 5 }, // expected-error {{';'}}
  &a == &b ? oopsMoreCommas() : removeUnusedLabels(a[0]);
}

int commaAtEndOfStatement() {
  int a = 1;
  a = 5, // expected-error {{';'}}
  int m = 5, // expected-error {{';'}}
  return 0, // expected-error {{';'}}
}

int noSemiAfterLabel(int n) {
  switch (n) {
    default:
      return n % 4;
    case 0:
    case 1:
    case 2:
    // CHECK: /*FOO*/ case 3: ;
    /*FOO*/ case 3: // expected-error {{expected statement}}
  }
  switch (n) {
    case 1:
    case 2:
      return 0;
    // CHECK: /*BAR*/ default: ;
    /*BAR*/ default: // expected-error {{expected statement}}
  }
  return 1;
}

struct noSemiAfterStruct // expected-error {{expected ';' after struct}}
struct noSemiAfterStruct {
  int n // expected-warning {{';'}}
} // expected-error {{expected ';' after struct}}
enum noSemiAfterEnum {
  e1
} // expected-error {{expected ';' after enum}}

int PR17175 __attribute__((visibility(hidden))); // expected-error {{'visibility' attribute requires a string}}
