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}}
   }
 }