cxx-class.cpp revision 4b0e6f1da341510c1ad83eaf4c836f3134d0156a
19ea416e598fa3cb09d67d514c4519c99abb81321Douglas Gregor// RUN: %clang_cc1 -fsyntax-only -verify -pedantic %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: 154cc18a4d5222e04bd568b1e3e4d86127dbbcdf3fArgyrios Kyrtzidis void m() { 164cc18a4d5222e04bd568b1e3e4d86127dbbcdf3fArgyrios Kyrtzidis int l = 2; 174b0e6f1da341510c1ad83eaf4c836f3134d0156aRichard Trieu }; // expected-warning{{extra ';' after function definition}} 189ea416e598fa3cb09d67d514c4519c99abb81321Douglas Gregor 194b0e6f1da341510c1ad83eaf4c836f3134d0156aRichard Trieu template<typename T> void mt(T) { } 209ea416e598fa3cb09d67d514c4519c99abb81321Douglas Gregor ; // expected-warning{{extra ';' inside a class}} 219ea416e598fa3cb09d67d514c4519c99abb81321Douglas Gregor 22ab963c6221ac088fad73a47bc7a0a0b266b030daSebastian Redl virtual int vf() const volatile = 0; 234cc18a4d5222e04bd568b1e3e4d86127dbbcdf3fArgyrios Kyrtzidis 244cc18a4d5222e04bd568b1e3e4d86127dbbcdf3fArgyrios Kyrtzidisprivate: 254cc18a4d5222e04bd568b1e3e4d86127dbbcdf3fArgyrios Kyrtzidis int x,f(),y,g(); 26ab963c6221ac088fad73a47bc7a0a0b266b030daSebastian Redl inline int h(); 27ab963c6221ac088fad73a47bc7a0a0b266b030daSebastian Redl static const int sci = 10; 28669d5d74b880a8497b92a3ec159145713f4d6519Sebastian Redl mutable int mi; 294cc18a4d5222e04bd568b1e3e4d86127dbbcdf3fArgyrios Kyrtzidis}; 30ab963c6221ac088fad73a47bc7a0a0b266b030daSebastian Redlvoid glo() 31ab963c6221ac088fad73a47bc7a0a0b266b030daSebastian Redl{ 32ab963c6221ac088fad73a47bc7a0a0b266b030daSebastian Redl struct local {}; 33ab963c6221ac088fad73a47bc7a0a0b266b030daSebastian Redl} 34bc8d56496a6ecdba14769df03d75c001184f8c54Chris Lattner 35bc8d56496a6ecdba14769df03d75c001184f8c54Chris Lattner// PR3177 36bc8d56496a6ecdba14769df03d75c001184f8c54Chris Lattnertypedef union { 37bc8d56496a6ecdba14769df03d75c001184f8c54Chris Lattner __extension__ union { 38bc8d56496a6ecdba14769df03d75c001184f8c54Chris Lattner int a; 39bc8d56496a6ecdba14769df03d75c001184f8c54Chris Lattner float b; 40bc8d56496a6ecdba14769df03d75c001184f8c54Chris Lattner } y; 41bc8d56496a6ecdba14769df03d75c001184f8c54Chris Lattner} bug3177; 42bc8d56496a6ecdba14769df03d75c001184f8c54Chris Lattner 4313f8daf70637f8f295134ac8e089dd7721e09085David Blaikie// check that we don't consume the token after the access specifier 4413f8daf70637f8f295134ac8e089dd7721e09085David Blaikie// when it's not a colon 4513f8daf70637f8f295134ac8e089dd7721e09085David Blaikieclass D { 4613f8daf70637f8f295134ac8e089dd7721e09085David Blaikiepublic // expected-error{{expected ':'}} 4713f8daf70637f8f295134ac8e089dd7721e09085David Blaikie int i; 4813f8daf70637f8f295134ac8e089dd7721e09085David Blaikie}; 4913f8daf70637f8f295134ac8e089dd7721e09085David Blaikie 5013f8daf70637f8f295134ac8e089dd7721e09085David Blaikie// consume the token after the access specifier if it's a semicolon 5113f8daf70637f8f295134ac8e089dd7721e09085David Blaikie// that was meant to be a colon 5213f8daf70637f8f295134ac8e089dd7721e09085David Blaikieclass E { 5313f8daf70637f8f295134ac8e089dd7721e09085David Blaikiepublic; // expected-error{{expected ':'}} 5413f8daf70637f8f295134ac8e089dd7721e09085David Blaikie int i; 5513f8daf70637f8f295134ac8e089dd7721e09085David Blaikie}; 5613f8daf70637f8f295134ac8e089dd7721e09085David Blaikie 5765ba94814f667e6ea1fcbf0896ad496bb7010335Richard Trieuclass F { 5865ba94814f667e6ea1fcbf0896ad496bb7010335Richard Trieu int F1 { return 1; } // expected-error{{function definition does not declare parameters}} 5965ba94814f667e6ea1fcbf0896ad496bb7010335Richard Trieu void F2 {} // expected-error{{function definition does not declare parameters}} 6065ba94814f667e6ea1fcbf0896ad496bb7010335Richard Trieu typedef int F3() { return 0; } // expected-error{{function definition declared 'typedef'}} 6165ba94814f667e6ea1fcbf0896ad496bb7010335Richard Trieu typedef void F4() {} // expected-error{{function definition declared 'typedef'}} 6265ba94814f667e6ea1fcbf0896ad496bb7010335Richard Trieu}; 6365ba94814f667e6ea1fcbf0896ad496bb7010335Richard Trieu 64412e0cc52ea644d804dcfa87194800371f91a977Richard Smithnamespace ctor_error { 65412e0cc52ea644d804dcfa87194800371f91a977Richard Smith class Foo {}; 66412e0cc52ea644d804dcfa87194800371f91a977Richard Smith // By [class.qual]p2, this is a constructor declaration. 67412e0cc52ea644d804dcfa87194800371f91a977Richard Smith Foo::Foo (F) = F(); // expected-error{{does not match any declaration in 'ctor_error::Foo'}} 68412e0cc52ea644d804dcfa87194800371f91a977Richard Smith 69412e0cc52ea644d804dcfa87194800371f91a977Richard Smith class Ctor { // expected-note{{not complete until the closing '}'}} 70412e0cc52ea644d804dcfa87194800371f91a977Richard Smith Ctor(f)(int); // ok 71412e0cc52ea644d804dcfa87194800371f91a977Richard Smith Ctor(g(int)); // ok 72412e0cc52ea644d804dcfa87194800371f91a977Richard Smith Ctor(x[5]); // expected-error{{incomplete type}} 73412e0cc52ea644d804dcfa87194800371f91a977Richard Smith 74412e0cc52ea644d804dcfa87194800371f91a977Richard Smith Ctor(UnknownType *); // expected-error{{unknown type name 'UnknownType'}} 7552f10d5f474741d2226630f576d44f1bf946d40aRichard Smith void operator+(UnknownType*); // expected-error{{unknown type name 'UnknownType'}} 76412e0cc52ea644d804dcfa87194800371f91a977Richard Smith }; 77412e0cc52ea644d804dcfa87194800371f91a977Richard Smith 78412e0cc52ea644d804dcfa87194800371f91a977Richard Smith Ctor::Ctor (x) = { 0 }; // \ 79412e0cc52ea644d804dcfa87194800371f91a977Richard Smith // expected-error{{qualified reference to 'Ctor' is a constructor name}} 80412e0cc52ea644d804dcfa87194800371f91a977Richard Smith 81412e0cc52ea644d804dcfa87194800371f91a977Richard Smith Ctor::Ctor(UnknownType *) {} // \ 8252f10d5f474741d2226630f576d44f1bf946d40aRichard Smith // expected-error{{unknown type name 'UnknownType'}} 8352f10d5f474741d2226630f576d44f1bf946d40aRichard Smith void Ctor::operator+(UnknownType*) {} // \ 8452f10d5f474741d2226630f576d44f1bf946d40aRichard Smith // expected-error{{unknown type name 'UnknownType'}} 85412e0cc52ea644d804dcfa87194800371f91a977Richard Smith} 86412e0cc52ea644d804dcfa87194800371f91a977Richard Smith 8713f8daf70637f8f295134ac8e089dd7721e09085David Blaikie// PR11109 must appear at the end of the source file 8813f8daf70637f8f295134ac8e089dd7721e09085David Blaikieclass pr11109r3 { // expected-note{{to match this '{'}} 8913f8daf70637f8f295134ac8e089dd7721e09085David Blaikie public // expected-error{{expected ':'}} expected-error{{expected '}'}} expected-error{{expected ';' after class}} 90