diff options
| author | John McCall <rjmccall@apple.com> | 2010-03-12 01:19:31 +0000 |
|---|---|---|
| committer | John McCall <rjmccall@apple.com> | 2010-03-12 01:19:31 +0000 |
| commit | 16927f6274015cfada7eaed7bf3b92ec912bf674 (patch) | |
| tree | c99929f372ca4ed68912d4e5aab2a8b2537c6f11 /clang/test | |
| parent | 90e2fc2fb396ae96da28b06fdd0de37ddda85f30 (diff) | |
| download | bcm5719-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.cpp | 51 |
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(); + } + }; +} |

