summaryrefslogtreecommitdiffstats
path: root/clang/test/SemaCXX/nested-name-spec.cpp
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2008-12-15 23:53:10 +0000
committerDouglas Gregor <dgregor@apple.com>2008-12-15 23:53:10 +0000
commitad590506a75abe99a5ae2f320abe6c1ec6e6c347 (patch)
tree45cbce39f77b9c648023b364fc56d951f4dfb007 /clang/test/SemaCXX/nested-name-spec.cpp
parent254a1a285c66002bf134020894136e58a96d2181 (diff)
downloadbcm5719-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.cpp21
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}}
OpenPOWER on IntegriCloud