1651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// RUN: %clang_cc1 -fsyntax-only -verify -pedantic -fcxx-exceptions %s 2ab963c6221ac088fad73a47bc7a0a0b266b030daSebastian Redlclass C; 34cc18a4d5222e04bd568b1e3e4d86127dbbcdf3fArgyrios Kyrtzidisclass C { 44cc18a4d5222e04bd568b1e3e4d86127dbbcdf3fArgyrios Kyrtzidispublic: 54cc18a4d5222e04bd568b1e3e4d86127dbbcdf3fArgyrios Kyrtzidisprotected: 64cc18a4d5222e04bd568b1e3e4d86127dbbcdf3fArgyrios Kyrtzidis typedef int A,B; 74cc18a4d5222e04bd568b1e3e4d86127dbbcdf3fArgyrios Kyrtzidis static int sf(), u; 84cc18a4d5222e04bd568b1e3e4d86127dbbcdf3fArgyrios Kyrtzidis 94cc18a4d5222e04bd568b1e3e4d86127dbbcdf3fArgyrios Kyrtzidis struct S {}; 10a131d0fc0af9f79c90e7654231041b2495d355a9Douglas Gregor enum {}; // expected-warning{{declaration does not declare anything}} 11cb821d045f5e445384f34d05a526955036073c4aDouglas Gregor int; // expected-warning {{declaration does not declare anything}} 123a9fdb4742b21c0a3c27f18c5e4e94bab6f9e64cArgyrios Kyrtzidis int : 1, : 2; 134cc18a4d5222e04bd568b1e3e4d86127dbbcdf3fArgyrios Kyrtzidis 144cc18a4d5222e04bd568b1e3e4d86127dbbcdf3fArgyrios Kyrtzidispublic: 15eab9d6f9065b042d39fbaf9842c9d8cc968dd6d0Richard Smith void m0() {}; // ok, one extra ';' is permitted 16eab9d6f9065b042d39fbaf9842c9d8cc968dd6d0Richard Smith void m1() {} 17eab9d6f9065b042d39fbaf9842c9d8cc968dd6d0Richard Smith ; // ok, one extra ';' is permitted 184cc18a4d5222e04bd568b1e3e4d86127dbbcdf3fArgyrios Kyrtzidis void m() { 194cc18a4d5222e04bd568b1e3e4d86127dbbcdf3fArgyrios Kyrtzidis int l = 2; 20eab9d6f9065b042d39fbaf9842c9d8cc968dd6d0Richard Smith };; // expected-warning{{extra ';' after member function definition}} 219ea416e598fa3cb09d67d514c4519c99abb81321Douglas Gregor 224b0e6f1da341510c1ad83eaf4c836f3134d0156aRichard Trieu template<typename T> void mt(T) { } 23eab9d6f9065b042d39fbaf9842c9d8cc968dd6d0Richard Smith ; 249ea416e598fa3cb09d67d514c4519c99abb81321Douglas Gregor ; // expected-warning{{extra ';' inside a class}} 259ea416e598fa3cb09d67d514c4519c99abb81321Douglas Gregor 26ab963c6221ac088fad73a47bc7a0a0b266b030daSebastian Redl virtual int vf() const volatile = 0; 274cc18a4d5222e04bd568b1e3e4d86127dbbcdf3fArgyrios Kyrtzidis 284cc18a4d5222e04bd568b1e3e4d86127dbbcdf3fArgyrios Kyrtzidisprivate: 294cc18a4d5222e04bd568b1e3e4d86127dbbcdf3fArgyrios Kyrtzidis int x,f(),y,g(); 30ab963c6221ac088fad73a47bc7a0a0b266b030daSebastian Redl inline int h(); 31ab963c6221ac088fad73a47bc7a0a0b266b030daSebastian Redl static const int sci = 10; 32669d5d74b880a8497b92a3ec159145713f4d6519Sebastian Redl mutable int mi; 334cc18a4d5222e04bd568b1e3e4d86127dbbcdf3fArgyrios Kyrtzidis}; 34ab963c6221ac088fad73a47bc7a0a0b266b030daSebastian Redlvoid glo() 35ab963c6221ac088fad73a47bc7a0a0b266b030daSebastian Redl{ 36ab963c6221ac088fad73a47bc7a0a0b266b030daSebastian Redl struct local {}; 37ab963c6221ac088fad73a47bc7a0a0b266b030daSebastian Redl} 38bc8d56496a6ecdba14769df03d75c001184f8c54Chris Lattner 39bc8d56496a6ecdba14769df03d75c001184f8c54Chris Lattner// PR3177 40bc8d56496a6ecdba14769df03d75c001184f8c54Chris Lattnertypedef union { 41bc8d56496a6ecdba14769df03d75c001184f8c54Chris Lattner __extension__ union { 42bc8d56496a6ecdba14769df03d75c001184f8c54Chris Lattner int a; 43bc8d56496a6ecdba14769df03d75c001184f8c54Chris Lattner float b; 44bc8d56496a6ecdba14769df03d75c001184f8c54Chris Lattner } y; 45bc8d56496a6ecdba14769df03d75c001184f8c54Chris Lattner} bug3177; 46bc8d56496a6ecdba14769df03d75c001184f8c54Chris Lattner 4713f8daf70637f8f295134ac8e089dd7721e09085David Blaikie// check that we don't consume the token after the access specifier 4813f8daf70637f8f295134ac8e089dd7721e09085David Blaikie// when it's not a colon 4913f8daf70637f8f295134ac8e089dd7721e09085David Blaikieclass D { 5013f8daf70637f8f295134ac8e089dd7721e09085David Blaikiepublic // expected-error{{expected ':'}} 5113f8daf70637f8f295134ac8e089dd7721e09085David Blaikie int i; 5213f8daf70637f8f295134ac8e089dd7721e09085David Blaikie}; 5313f8daf70637f8f295134ac8e089dd7721e09085David Blaikie 5413f8daf70637f8f295134ac8e089dd7721e09085David Blaikie// consume the token after the access specifier if it's a semicolon 5513f8daf70637f8f295134ac8e089dd7721e09085David Blaikie// that was meant to be a colon 5613f8daf70637f8f295134ac8e089dd7721e09085David Blaikieclass E { 5713f8daf70637f8f295134ac8e089dd7721e09085David Blaikiepublic; // expected-error{{expected ':'}} 5813f8daf70637f8f295134ac8e089dd7721e09085David Blaikie int i; 5913f8daf70637f8f295134ac8e089dd7721e09085David Blaikie}; 6013f8daf70637f8f295134ac8e089dd7721e09085David Blaikie 6165ba94814f667e6ea1fcbf0896ad496bb7010335Richard Trieuclass F { 6265ba94814f667e6ea1fcbf0896ad496bb7010335Richard Trieu int F1 { return 1; } // expected-error{{function definition does not declare parameters}} 6365ba94814f667e6ea1fcbf0896ad496bb7010335Richard Trieu void F2 {} // expected-error{{function definition does not declare parameters}} 6465ba94814f667e6ea1fcbf0896ad496bb7010335Richard Trieu typedef int F3() { return 0; } // expected-error{{function definition declared 'typedef'}} 6565ba94814f667e6ea1fcbf0896ad496bb7010335Richard Trieu typedef void F4() {} // expected-error{{function definition declared 'typedef'}} 6665ba94814f667e6ea1fcbf0896ad496bb7010335Richard Trieu}; 6765ba94814f667e6ea1fcbf0896ad496bb7010335Richard Trieu 68412e0cc52ea644d804dcfa87194800371f91a977Richard Smithnamespace ctor_error { 69412e0cc52ea644d804dcfa87194800371f91a977Richard Smith class Foo {}; 70412e0cc52ea644d804dcfa87194800371f91a977Richard Smith // By [class.qual]p2, this is a constructor declaration. 71412e0cc52ea644d804dcfa87194800371f91a977Richard Smith Foo::Foo (F) = F(); // expected-error{{does not match any declaration in 'ctor_error::Foo'}} 72412e0cc52ea644d804dcfa87194800371f91a977Richard Smith 73412e0cc52ea644d804dcfa87194800371f91a977Richard Smith class Ctor { // expected-note{{not complete until the closing '}'}} 74412e0cc52ea644d804dcfa87194800371f91a977Richard Smith Ctor(f)(int); // ok 75412e0cc52ea644d804dcfa87194800371f91a977Richard Smith Ctor(g(int)); // ok 76412e0cc52ea644d804dcfa87194800371f91a977Richard Smith Ctor(x[5]); // expected-error{{incomplete type}} 77412e0cc52ea644d804dcfa87194800371f91a977Richard Smith 78412e0cc52ea644d804dcfa87194800371f91a977Richard Smith Ctor(UnknownType *); // expected-error{{unknown type name 'UnknownType'}} 7952f10d5f474741d2226630f576d44f1bf946d40aRichard Smith void operator+(UnknownType*); // expected-error{{unknown type name 'UnknownType'}} 80412e0cc52ea644d804dcfa87194800371f91a977Richard Smith }; 81412e0cc52ea644d804dcfa87194800371f91a977Richard Smith 82412e0cc52ea644d804dcfa87194800371f91a977Richard Smith Ctor::Ctor (x) = { 0 }; // \ 83412e0cc52ea644d804dcfa87194800371f91a977Richard Smith // expected-error{{qualified reference to 'Ctor' is a constructor name}} 84412e0cc52ea644d804dcfa87194800371f91a977Richard Smith 85412e0cc52ea644d804dcfa87194800371f91a977Richard Smith Ctor::Ctor(UnknownType *) {} // \ 8652f10d5f474741d2226630f576d44f1bf946d40aRichard Smith // expected-error{{unknown type name 'UnknownType'}} 8752f10d5f474741d2226630f576d44f1bf946d40aRichard Smith void Ctor::operator+(UnknownType*) {} // \ 8852f10d5f474741d2226630f576d44f1bf946d40aRichard Smith // expected-error{{unknown type name 'UnknownType'}} 89412e0cc52ea644d804dcfa87194800371f91a977Richard Smith} 90412e0cc52ea644d804dcfa87194800371f91a977Richard Smith 91c7f811638f8603fa373d2be724e8b1c8ba51ad75Richard Smithnamespace nns_decl { 92c7f811638f8603fa373d2be724e8b1c8ba51ad75Richard Smith struct A { 93c7f811638f8603fa373d2be724e8b1c8ba51ad75Richard Smith struct B; 94c7f811638f8603fa373d2be724e8b1c8ba51ad75Richard Smith }; 95c7f811638f8603fa373d2be724e8b1c8ba51ad75Richard Smith namespace N { 96c7f811638f8603fa373d2be724e8b1c8ba51ad75Richard Smith union C; 97c7f811638f8603fa373d2be724e8b1c8ba51ad75Richard Smith } 98c7f811638f8603fa373d2be724e8b1c8ba51ad75Richard Smith struct A::B; // expected-error {{forward declaration of struct cannot have a nested name specifier}} 99c7f811638f8603fa373d2be724e8b1c8ba51ad75Richard Smith union N::C; // expected-error {{forward declaration of union cannot have a nested name specifier}} 100c7f811638f8603fa373d2be724e8b1c8ba51ad75Richard Smith} 101c7f811638f8603fa373d2be724e8b1c8ba51ad75Richard Smith 10269e4826edc1858d9e2cdef508b469af750ec2b09Richard Smith// PR13775: Don't assert here. 10369e4826edc1858d9e2cdef508b469af750ec2b09Richard Smithnamespace PR13775 { 10469e4826edc1858d9e2cdef508b469af750ec2b09Richard Smith class bar 10569e4826edc1858d9e2cdef508b469af750ec2b09Richard Smith { 10669e4826edc1858d9e2cdef508b469af750ec2b09Richard Smith public: 10769e4826edc1858d9e2cdef508b469af750ec2b09Richard Smith void foo (); 10869e4826edc1858d9e2cdef508b469af750ec2b09Richard Smith void baz (); 10969e4826edc1858d9e2cdef508b469af750ec2b09Richard Smith }; 11069e4826edc1858d9e2cdef508b469af750ec2b09Richard Smith void bar::foo () 11169e4826edc1858d9e2cdef508b469af750ec2b09Richard Smith { 11269e4826edc1858d9e2cdef508b469af750ec2b09Richard Smith baz x(); // expected-error 3{{}} 11369e4826edc1858d9e2cdef508b469af750ec2b09Richard Smith } 11469e4826edc1858d9e2cdef508b469af750ec2b09Richard Smith} 11569e4826edc1858d9e2cdef508b469af750ec2b09Richard Smith 116651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesclass pr16989 { 117651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void tpl_mem(int *) { 118651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return; 119651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines class C2 { 120651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void f(); 121651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines }; 122651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void C2::f() {} // expected-error{{function definition is not allowed here}} 123651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines }; 124651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}; 125651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 126651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesnamespace CtorErrors { 127651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines struct A { 128651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines A(NonExistent); // expected-error {{unknown type name 'NonExistent'}} 129651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines }; 130651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines struct B { 131651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines B(NonExistent) : n(0) {} // expected-error {{unknown type name 'NonExistent'}} 132651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines int n; 133651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines }; 134651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines struct C { 135651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines C(NonExistent) try {} catch (...) {} // expected-error {{unknown type name 'NonExistent'}} 136651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines }; 137651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines struct D { 138651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines D(NonExistent) {} // expected-error {{unknown type name 'NonExistent'}} 139651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines }; 140651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 141651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 14213f8daf70637f8f295134ac8e089dd7721e09085David Blaikie// PR11109 must appear at the end of the source file 14313f8daf70637f8f295134ac8e089dd7721e09085David Blaikieclass pr11109r3 { // expected-note{{to match this '{'}} 14413f8daf70637f8f295134ac8e089dd7721e09085David Blaikie public // expected-error{{expected ':'}} expected-error{{expected '}'}} expected-error{{expected ';' after class}} 145