aboutsummaryrefslogtreecommitdiff
path: root/test/SemaCXX/access-base-class.cpp
diff options
context:
space:
mode:
authorAnders Carlsson <andersca@mac.com>2009-03-28 01:09:05 +0000
committerAnders Carlsson <andersca@mac.com>2009-03-28 01:09:05 +0000
commite5194ff24c224fa8ee83064dff73f62f745a4469 (patch)
tree5ac4e61124fdc023154bb212181e4c54640facf3 /test/SemaCXX/access-base-class.cpp
parent52ba870eba17e634339622dbf103434ca31935eb (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.cpp32
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 *'}}
+}
+
+}