diff options
author | Douglas Gregor <dgregor@apple.com> | 2008-12-15 23:53:10 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2008-12-15 23:53:10 +0000 |
commit | ad590506a75abe99a5ae2f320abe6c1ec6e6c347 (patch) | |
tree | 45cbce39f77b9c648023b364fc56d951f4dfb007 /clang/test/SemaCXX/nested-name-spec.cpp | |
parent | 254a1a285c66002bf134020894136e58a96d2181 (diff) | |
download | bcm5719-llvm-ad590506a75abe99a5ae2f320abe6c1ec6e6c347.tar.gz bcm5719-llvm-ad590506a75abe99a5ae2f320abe6c1ec6e6c347.zip |
Diagnose erroneous uses of out-of-line member definitions and scope
specifiers. Specifically:
* Determine when an out-of-line function definition does not match
any declaration within the class or namespace (including coping
with overloaded functions).
* Complain about typedefs and parameters that have scope specifiers.
* Complain about out-of-line declarations that aren't also
definitions.
* Complain about non-static data members being declared out-of-line.
* Allow cv-qualifiers on out-of-line member function definitions.
llvm-svn: 61058
Diffstat (limited to 'clang/test/SemaCXX/nested-name-spec.cpp')
-rw-r--r-- | clang/test/SemaCXX/nested-name-spec.cpp | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/clang/test/SemaCXX/nested-name-spec.cpp b/clang/test/SemaCXX/nested-name-spec.cpp index b6032e64946..1d91c24b969 100644 --- a/clang/test/SemaCXX/nested-name-spec.cpp +++ b/clang/test/SemaCXX/nested-name-spec.cpp @@ -12,10 +12,19 @@ A:: ; // expected-error {{expected unqualified-id}} A::undef1::undef2 ex4; // expected-error {{no member named 'undef1'}} expected-error {{expected '=', ',', ';', 'asm', or '__attribute__' after declarator}} class C2 { - void m(); + void m(); // expected-note{{member declaration nearly matches}} + + void f(const int& parm); // expected-note{{member declaration nearly matches}} + void f(int) const; // expected-note{{member declaration nearly matches}} + void f(float); + int x; }; +void C2::m() const { } // expected-error{{out-of-line definition does not match any declaration in 'C2'}} + +void C2::f(int) { } // expected-error{{out-of-line definition does not match any declaration in 'C2'}} + void C2::m() { x = 0; } @@ -25,7 +34,7 @@ namespace B { } void f1() { - void A::Af(); // expected-error {{definition or redeclaration of 'Af' not allowed inside a function}} + void A::Af(); // expected-error {{definition or redeclaration of 'Af' not allowed inside a function}} } void f2() { @@ -73,3 +82,11 @@ void f3() { // make sure the following doesn't hit any asserts void f4(undef::C); // expected-error {{use of undeclared identifier 'undef'}} // expected-error {{expected ')'}} expected-note {{to match this '('}} // expected-error {{variable has incomplete type 'void'}} + +typedef void C2::f5(int); // expected-error{{typedef declarator cannot be qualified}} + +void f6(int A2::RC::x); // expected-error{{parameter declarator cannot be qualified}} + +int A2::RC::x; // expected-error{{non-static data member defined out-of-line}} + +void A2::CC::NC::m(); // expected-error{{out-of-line declaration of a member must be a definition}} |