summaryrefslogtreecommitdiffstats
path: root/clang/test
diff options
context:
space:
mode:
authorJohn McCall <rjmccall@apple.com>2010-03-12 01:19:31 +0000
committerJohn McCall <rjmccall@apple.com>2010-03-12 01:19:31 +0000
commit16927f6274015cfada7eaed7bf3b92ec912bf674 (patch)
treec99929f372ca4ed68912d4e5aab2a8b2537c6f11 /clang/test
parent90e2fc2fb396ae96da28b06fdd0de37ddda85f30 (diff)
downloadbcm5719-llvm-16927f6274015cfada7eaed7bf3b92ec912bf674.tar.gz
bcm5719-llvm-16927f6274015cfada7eaed7bf3b92ec912bf674.zip
Implement basic support for friend types and functions in non-dependent
contexts. llvm-svn: 98321
Diffstat (limited to 'clang/test')
-rw-r--r--clang/test/CXX/class.access/class.friend/p1.cpp51
1 files changed, 50 insertions, 1 deletions
diff --git a/clang/test/CXX/class.access/class.friend/p1.cpp b/clang/test/CXX/class.access/class.friend/p1.cpp
index a06fb2e3e3c..e1f2399e7b5 100644
--- a/clang/test/CXX/class.access/class.friend/p1.cpp
+++ b/clang/test/CXX/class.access/class.friend/p1.cpp
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -fsyntax-only -verify %s
+// RUN: %clang_cc1 -fsyntax-only -faccess-control -verify %s
// C++'0x [class.friend] p1:
// A friend of a class is a function or class that is given permission to use
@@ -60,3 +60,52 @@ namespace N {
x.g2(); // expected-error{{no member named 'g2' in 'N::X'}}
}
}
+
+namespace test0 {
+ class ClassFriend {
+ void test();
+ };
+
+ class MemberFriend {
+ void test();
+ };
+
+ void declared_test();
+
+ class Class {
+ static void member(); // expected-note {{declared private here}}
+
+ friend class ClassFriend;
+ friend class UndeclaredClassFriend;
+
+ friend void undeclared_test();
+ friend void declared_test();
+ friend void MemberFriend::test();
+ };
+
+ void declared_test() {
+ Class::member();
+ }
+
+ void undeclared_test() {
+ Class::member();
+ }
+
+ void unfriended_test() {
+ Class::member(); // expected-error {{'member' is a private member of 'test0::Class'}}
+ }
+
+ void ClassFriend::test() {
+ Class::member();
+ }
+
+ void MemberFriend::test() {
+ Class::member();
+ }
+
+ class UndeclaredClassFriend {
+ void test() {
+ Class::member();
+ }
+ };
+}
OpenPOWER on IntegriCloud