Hi,

as agreed, I regtested on x86_64-linux the below diagnostic tweak.

Thanks,
Paolo.

//////////////////////////
/cp
2013-05-16  Paolo Carlini  <paolo.carl...@oracle.com>

        PR c++/17314
        * call.c (enforce_access): Improve protected access error message.

/testsuite
2013-05-16  Paolo Carlini  <paolo.carl...@oracle.com>

        PR c++/17314
        * g++.dg/inherit/access9.C: New.
Index: cp/call.c
===================================================================
--- cp/call.c   (revision 198962)
+++ cp/call.c   (working copy)
@@ -5707,7 +5707,7 @@ enforce_access (tree basetype_path, tree decl, tre
          if (TREE_PRIVATE (decl))
            error ("%q+#D is private", diag_decl);
          else if (TREE_PROTECTED (decl))
-           error ("%q+#D is protected", diag_decl);
+           error ("%q+#D, declared protected, is inaccessible", diag_decl);
          else
            error ("%q+#D is inaccessible", diag_decl);
          error ("within this context");
Index: testsuite/g++.dg/inherit/access9.C
===================================================================
--- testsuite/g++.dg/inherit/access9.C  (revision 0)
+++ testsuite/g++.dg/inherit/access9.C  (working copy)
@@ -0,0 +1,16 @@
+// PR c++/17314
+
+class A
+{
+protected:
+  A(){}                 // { dg-error "declared protected" }
+};
+
+class B : virtual A {};
+
+class C : public B {};  // { dg-error "within this context" }
+                        // { dg-message "deleted" "" { target c++11 } 11 }
+int main ()
+{
+  C c;                  // { dg-message "required here" "" { target c++98 } }
+}                       // { dg-error "deleted" "" { target c++11 } 15 }

Reply via email to