diff options
author | John McCall <rjmccall@apple.com> | 2010-04-02 00:03:43 +0000 |
---|---|---|
committer | John McCall <rjmccall@apple.com> | 2010-04-02 00:03:43 +0000 |
commit | db73c684ba61fed4087af488e8610657ec638c17 (patch) | |
tree | ea9217e72903f1a34f49d0539d61a6cc7a4bb285 /test/CXX/class.access/class.access.base/p5.cpp | |
parent | 26ad5c08589ae8992d7202e2178e2eeee1eab586 (diff) |
Correct the calculation of access to more closely model the wording in
the standard.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@100155 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CXX/class.access/class.access.base/p5.cpp')
-rw-r--r-- | test/CXX/class.access/class.access.base/p5.cpp | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/test/CXX/class.access/class.access.base/p5.cpp b/test/CXX/class.access/class.access.base/p5.cpp new file mode 100644 index 0000000000..f84d3b2752 --- /dev/null +++ b/test/CXX/class.access/class.access.base/p5.cpp @@ -0,0 +1,59 @@ +// RUN: %clang_cc1 -faccess-control -verify %s + +namespace test0 { + struct A { + static int x; + }; + struct B : A {}; + struct C : B {}; + + int test() { + return A::x + + B::x + + C::x; + } +} + +namespace test1 { + struct A { + private: static int x; // expected-note 5 {{declared private here}} + static int test() { return x; } + }; + struct B : public A { + static int test() { return x; } // expected-error {{private member}} + }; + struct C : private A { + static int test() { return x; } // expected-error {{private member}} + }; + + struct D { + public: static int x; + static int test() { return x; } + }; + struct E : private D { // expected-note{{constrained by private inheritance}} + static int test() { return x; } + }; + + int test() { + return A::x // expected-error {{private member}} + + B::x // expected-error {{private member}} + + C::x // expected-error {{private member}} + + D::x + + E::x; // expected-error {{private member}} + } +} + +namespace test2 { + class A { + protected: static int x; + }; + + class B : private A {}; // expected-note {{private inheritance}} + class C : private A { + int test(B *b) { + return b->x; // expected-error {{private member}} + } + }; +} + +// TODO: flesh out these cases |