1 // RUN: %clang_cc1 -fsyntax-only -verify -pedantic %s 2 class C; 3 class C { 4 public: 5 protected: 6 typedef int A,B; 7 static int sf(), u; 8 9 struct S {}; 10 enum {}; // expected-warning{{declaration does not declare anything}} 11 int; // expected-warning {{declaration does not declare anything}} 12 int : 1, : 2; 13 14 public: 15 void m0() {}; // ok, one extra ';' is permitted 16 void m1() {} 17 ; // ok, one extra ';' is permitted 18 void m() { 19 int l = 2; 20 };; // expected-warning{{extra ';' after member function definition}} 21 22 template<typename T> void mt(T) { } 23 ; 24 ; // expected-warning{{extra ';' inside a class}} 25 26 virtual int vf() const volatile = 0; 27 28 private: 29 int x,f(),y,g(); 30 inline int h(); 31 static const int sci = 10; 32 mutable int mi; 33 }; 34 void glo() 35 { 36 struct local {}; 37 } 38 39 // PR3177 40 typedef union { 41 __extension__ union { 42 int a; 43 float b; 44 } y; 45 } bug3177; 46 47 // check that we don't consume the token after the access specifier 48 // when it's not a colon 49 class D { 50 public // expected-error{{expected ':'}} 51 int i; 52 }; 53 54 // consume the token after the access specifier if it's a semicolon 55 // that was meant to be a colon 56 class E { 57 public; // expected-error{{expected ':'}} 58 int i; 59 }; 60 61 class F { 62 int F1 { return 1; } // expected-error{{function definition does not declare parameters}} 63 void F2 {} // expected-error{{function definition does not declare parameters}} 64 typedef int F3() { return 0; } // expected-error{{function definition declared 'typedef'}} 65 typedef void F4() {} // expected-error{{function definition declared 'typedef'}} 66 }; 67 68 namespace ctor_error { 69 class Foo {}; 70 // By [class.qual]p2, this is a constructor declaration. 71 Foo::Foo (F) = F(); // expected-error{{does not match any declaration in 'ctor_error::Foo'}} 72 73 class Ctor { // expected-note{{not complete until the closing '}'}} 74 Ctor(f)(int); // ok 75 Ctor(g(int)); // ok 76 Ctor(x[5]); // expected-error{{incomplete type}} 77 78 Ctor(UnknownType *); // expected-error{{unknown type name 'UnknownType'}} 79 void operator+(UnknownType*); // expected-error{{unknown type name 'UnknownType'}} 80 }; 81 82 Ctor::Ctor (x) = { 0 }; // \ 83 // expected-error{{qualified reference to 'Ctor' is a constructor name}} 84 85 Ctor::Ctor(UnknownType *) {} // \ 86 // expected-error{{unknown type name 'UnknownType'}} 87 void Ctor::operator+(UnknownType*) {} // \ 88 // expected-error{{unknown type name 'UnknownType'}} 89 } 90 91 namespace nns_decl { 92 struct A { 93 struct B; 94 }; 95 namespace N { 96 union C; 97 } 98 struct A::B; // expected-error {{forward declaration of struct cannot have a nested name specifier}} 99 union N::C; // expected-error {{forward declaration of union cannot have a nested name specifier}} 100 } 101 102 // PR13775: Don't assert here. 103 namespace PR13775 { 104 class bar 105 { 106 public: 107 void foo (); 108 void baz (); 109 }; 110 void bar::foo () 111 { 112 baz x(); // expected-error 3{{}} 113 } 114 } 115 116 // PR11109 must appear at the end of the source file 117 class pr11109r3 { // expected-note{{to match this '{'}} 118 public // expected-error{{expected ':'}} expected-error{{expected '}'}} expected-error{{expected ';' after class}} 119