diff options
author | Anders Carlsson <andersca@mac.com> | 2009-03-28 01:09:05 +0000 |
---|---|---|
committer | Anders Carlsson <andersca@mac.com> | 2009-03-28 01:09:05 +0000 |
commit | e5194ff24c224fa8ee83064dff73f62f745a4469 (patch) | |
tree | 5ac4e61124fdc023154bb212181e4c54640facf3 /test/SemaCXX/access-base-class.cpp | |
parent | 52ba870eba17e634339622dbf103434ca31935eb (diff) |
Implement access checking for protected base classes.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@67887 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/SemaCXX/access-base-class.cpp')
-rw-r--r-- | test/SemaCXX/access-base-class.cpp | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/test/SemaCXX/access-base-class.cpp b/test/SemaCXX/access-base-class.cpp index f98437695e..3e50b26e5a 100644 --- a/test/SemaCXX/access-base-class.cpp +++ b/test/SemaCXX/access-base-class.cpp @@ -80,3 +80,35 @@ namespace T6 { A *a = c; } } + +namespace T7 { + +class C; +class A { }; +class B : protected A { // expected-note {{'protected' inheritance specifier here}} + void f(C *); +}; + +class C : protected B { // expected-note {{'protected' inheritance specifier here}} + void f(C *c) { + A* a = c; + } +}; + +void B::f(C *c) { + A *a = c; // expected-error {{conversion from 'class T7::C' to inaccessible base class 'class T7::A'}} \ + expected-error {{incompatible type initializing 'class T7::C *', expected 'class T7::A *'}} +} + +class D : private C { + void f(D *d) { + A *a = d; + } +}; + +void f(B* b) { + A *a = b; // expected-error {{conversion from 'class T7::B' to inaccessible base class 'class T7::A'}} \ + expected-error {{incompatible type initializing 'class T7::B *', expected 'class T7::A *'}} +} + +} |