When creating a call to a base subobject's operator= in an
implicitly-defined copy assignment operator, suppress the protected
access check. This eliminates the remaining failure in the
Boost.SmartPtr library (that was a product of the copy-assignment
generation rewrite) and, presumably, the Boost.TR1 library as well.
llvm-svn: 103010
diff --git a/clang/test/SemaCXX/default-assignment-operator.cpp b/clang/test/SemaCXX/default-assignment-operator.cpp
index a04de37..dee6d13 100644
--- a/clang/test/SemaCXX/default-assignment-operator.cpp
+++ b/clang/test/SemaCXX/default-assignment-operator.cpp
@@ -89,3 +89,31 @@
e1 = e2;
}
+namespace ProtectedCheck {
+ struct X {
+ protected:
+ X &operator=(const X&); // expected-note{{declared protected here}}
+ };
+
+ struct Y : public X { };
+
+ void f(Y y) { y = y; }
+
+ struct Z { // expected-error{{'operator=' is a protected member of 'ProtectedCheck::X'}}
+ X x;
+ };
+
+ void f(Z z) { z = z; } //
+}
+
+namespace MultiplePaths {
+ struct X0 {
+ X0 &operator=(const X0&);
+ };
+
+ struct X1 : public virtual X0 { };
+
+ struct X2 : X0, X1 { };
+
+ void f(X2 x2) { x2 = x2; }
+}