// RUN: %clang_cc1 -fsyntax-only -Wmismatched-tags -verify %s
// RUN: not %clang_cc1 -fsyntax-only -Wmismatched-tags %s 2>&1 | FileCheck %s
class X; // expected-note 2{{here}}
typedef struct X * X_t; // expected-warning{{previously declared}}
union X { int x; float y; }; // expected-error{{use of 'X' with tag type that does not match previous declaration}}

template<typename T> struct Y; // expected-note{{did you mean class here?}}
template<class U> class Y { }; // expected-warning{{previously declared}}

template <typename>
struct Z {
  struct Z { // expected-error{{member 'Z' has the same name as its class}}
  };
};

class A;
class A;  // expected-note{{previous use is here}}
struct A;  // expected-warning{{struct 'A' was previously declared as a class}}

class B;  // expected-note{{did you mean struct here?}}
class B;  // expected-note{{previous use is here}}\
          // expected-note{{did you mean struct here?}}
struct B;  // expected-warning{{struct 'B' was previously declared as a class}}
struct B {};  // expected-warning{{'B' defined as a struct here but previously declared as a class}}

class C;  // expected-note{{previous use is here}}
struct C;  // expected-warning{{struct 'C' was previously declared as a class}}\
           // expected-note{{previous use is here}}\
           // expected-note{{did you mean class here?}}
class C;  // expected-warning{{class 'C' was previously declared as a struct}}\
          // expected-note{{previous use is here}}
struct C;  // expected-warning{{struct 'C' was previously declared as a class}}\
           // expected-note{{did you mean class here?}}
class C {};  // expected-warning{{'C' defined as a class here but previously declared as a struct}}

struct D {};  // expected-note{{previous definition is here}}\
              // expected-note{{previous use is here}}
class D {};  // expected-error{{redefinition of 'D'}}
struct D;
class D;  // expected-warning{{class 'D' was previously declared as a struct}}\
          // expected-note{{did you mean struct here?}}

class E;
class E;
class E {};
class E;

struct F;
struct F;
struct F {};
struct F;

template<class U> class G;  // expected-note{{previous use is here}}\
                            // expected-note{{did you mean struct here?}}
template<class U> struct G;  // expected-warning{{struct template 'G' was previously declared as a class template}}
template<class U> struct G {};  // expected-warning{{'G' defined as a struct template here but previously declared as a class template}}

/*
*** 'X' messages ***
CHECK: warning: struct 'X' was previously declared as a class
CHECK: {{^}}typedef struct X * X_t;
CHECK: {{^}}        ^{{$}}
CHECK: note: previous use is here
CHECK: {{^}}class X;
CHECK: {{^}}      ^{{$}}
CHECK: error: use of 'X' with tag type that does not match previous declaration
CHECK: {{^}}union X { int x; float y; };
CHECK: {{^}}^~~~~{{$}}
CHECK: {{^}}class{{$}}
CHECK: note: previous use is here
CHECK: {{^}}class X;
CHECK: {{^}}      ^{{$}}
*** 'Y' messages ***
CHECK: warning: 'Y' defined as a class template here but
      previously declared as a struct template
CHECK: {{^}}template<class U> class Y { };
CHECK: {{^}}                  ^{{$}}
CHECK: note: did you mean class here?
CHECK: {{^}}template<typename T> struct Y;
CHECK: {{^}}                     ^~~~~~{{$}}
CHECK: {{^}}                     class{{$}}
*** 'A' messages ***
CHECK: warning: struct 'A' was previously declared as a class
CHECK: {{^}}struct A;
CHECK: {{^}}^{{$}}
CHECK: note: previous use is here
CHECK: {{^}}class A;
CHECK: {{^}}      ^{{$}}
*** 'B' messages ***
CHECK: warning: struct 'B' was previously declared as a class
CHECK: {{^}}struct B;
CHECK: {{^}}^{{$}}
CHECK: note: previous use is here
CHECK: {{^}}class B;
CHECK: {{^}}      ^{{$}}
CHECK: 'B' defined as a struct here but previously declared as a class
CHECK: {{^}}struct B {};
CHECK: {{^}}^{{$}}
CHECK: note: did you mean struct here?
CHECK: {{^}}class B;
CHECK: {{^}}^~~~~{{$}}
CHECK: {{^}}struct{{$}}
CHECK: note: did you mean struct here?
CHECK: {{^}}class B;
CHECK: {{^}}^~~~~{{$}}
CHECK: {{^}}struct{{$}}
*** 'C' messages ***
CHECK: warning: struct 'C' was previously declared as a class
CHECK: {{^}}struct C;
CHECK: {{^}}^{{$}}
CHECK: note: previous use is here
CHECK: {{^}}class C;
CHECK: {{^}}      ^{{$}}
CHECK: warning: class 'C' was previously declared as a struct
CHECK: {{^}}class C;
CHECK: {{^}}^{{$}}
CHECK: note: previous use is here
CHECK: {{^}}struct C;
CHECK: {{^}}       ^{{$}}
CHECK: warning: struct 'C' was previously declared as a class
CHECK: {{^}}struct C;
CHECK: {{^}}^{{$}}
CHECK: note: previous use is here
CHECK: {{^}}class C;
CHECK: {{^}}      ^{{$}}
CHECK: warning: 'C' defined as a class here but previously declared as a struct
CHECK: {{^}}class C {};
CHECK: {{^}}^{{$}}
CHECK: note: did you mean class here?
CHECK: {{^}}struct C;
CHECK: {{^}}^~~~~~{{$}}
CHECK: {{^}}class{{$}}
CHECK: note: did you mean class here?
CHECK: {{^}}struct C;
CHECK: {{^}}^~~~~~{{$}}
CHECK: {{^}}class{{$}}
*** 'D' messages ***
CHECK: error: redefinition of 'D'
CHECK: {{^}}class D {};
CHECK: {{^}}      ^{{$}}
CHECK: note: previous definition is here
CHECK: {{^}}struct D {};
CHECK: {{^}}       ^{{$}}
CHECK: warning: class 'D' was previously declared as a struct
CHECK: {{^}}class D;
CHECK: {{^}}^{{$}}
CHECK: note: previous use is here
CHECK: {{^}}struct D {};
CHECK: {{^}}       ^{{$}}
CHECK: note: did you mean struct here?
CHECK: {{^}}class D;
CHECK: {{^}}^~~~~{{$}}
CHECK: {{^}}struct{{$}}
*** 'E' messages ***
*** 'F' messages ***
*** 'G' messages ***
CHECK: warning: struct template 'G' was previously declared as a class template
CHECK: {{^}}template<class U> struct G;
CHECK: {{^}}                  ^{{$}}
CHECK: note: previous use is here
CHECK: {{^}}template<class U> class G;
CHECK: {{^}}                        ^{{$}}
CHECK: warning: 'G' defined as a struct template here but previously declared as a class template
CHECK: {{^}}template<class U> struct G {};
CHECK: {{^}}                  ^{{$}}
CHECK: note: did you mean struct here?
CHECK: {{^}}template<class U> class G;
CHECK: {{^}}                  ^~~~~
CHECK: {{^}}                  struct
*/
