Improve access control diagnostics. Perform access control on member-pointer
conversions. Fix an access-control bug where privileges were not considered
at intermediate points along the inheritance path. Prepare for friends.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@95775 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/test/CXX/class.access/p4.cpp b/test/CXX/class.access/p4.cpp
index 83e467d..7aa614c 100644
--- a/test/CXX/class.access/p4.cpp
+++ b/test/CXX/class.access/p4.cpp
@@ -23,12 +23,12 @@
void test(A *op) {
op->foo(PublicInst);
- op->foo(ProtectedInst); // expected-error {{access to protected member outside any class}}
- op->foo(PrivateInst); // expected-error {{access to private member outside any class}}
+ op->foo(ProtectedInst); // expected-error {{'foo' is a protected member}}
+ op->foo(PrivateInst); // expected-error {{'foo' is a private member}}
void (A::*a)(Public&) = &A::foo;
- void (A::*b)(Protected&) = &A::foo; // expected-error {{access to protected member outside any class}}
- void (A::*c)(Private&) = &A::foo; // expected-error {{access to private member outside any class}}
+ void (A::*b)(Protected&) = &A::foo; // expected-error {{'foo' is a protected member}}
+ void (A::*c)(Private&) = &A::foo; // expected-error {{'foo' is a private member}}
}
}
@@ -62,15 +62,15 @@
void test(A &a, Public &pub, Protected &prot, Private &priv) {
a + pub;
- a + prot; // expected-error {{access to protected member}}
- a + priv; // expected-error {{access to private member}}
+ a + prot; // expected-error {{'operator+' is a protected member}}
+ a + priv; // expected-error {{'operator+' is a private member}}
a[pub];
- a[prot]; // expected-error {{access to protected member}}
- a[priv]; // expected-error {{access to private member}}
+ a[prot]; // expected-error {{'operator[]' is a protected member}}
+ a[priv]; // expected-error {{'operator[]' is a private member}}
a(pub);
- a(prot); // expected-error {{access to protected member}}
- a(priv); // expected-error {{access to private member}}
- -a; // expected-error {{access to private member}}
+ a(prot); // expected-error {{'operator()' is a protected member}}
+ a(priv); // expected-error {{'operator()' is a private member}}
+ -a; // expected-error {{'operator-' is a private member}}
const A &ca = a;
ca + pub;
@@ -79,8 +79,8 @@
-ca;
// These are all surrogate calls
ca(pub);
- ca(prot); // expected-error {{access to protected member}}
- ca(priv); // expected-error {{access to private member}}
+ ca(prot); // expected-error {{'operator void (*)(class Protected &)' is a protected member}}
+ ca(priv); // expected-error {{'operator void (*)(class Private &)' is a private member}}
}
}
@@ -93,7 +93,7 @@
static A foo;
};
- A a; // expected-error {{access to private member}}
+ A a; // expected-error {{calling a private constructor}}
A A::foo; // okay
}
@@ -105,10 +105,10 @@
static A foo;
};
- A a; // expected-error {{access to private member}}
+ A a; // expected-error {{'~A' is a private member}}
A A::foo;
- void foo(A param) { // expected-error {{access to private member}}
- A local; // expected-error {{access to private member}}
+ void foo(A param) { // expected-error {{'~A' is a private member}}
+ A local; // expected-error {{'~A' is a private member}}
}
}