Hi,
I committed the below patchlet, per the exchange with Jason on the audit
trail, after having regtested it on x86_64-linux.
Thanks,
Paolo.
////////////////////
/cp
2011-04-28 Paolo Carlini <paolo.carl...@oracle.com>
PR c++/48798
* semantics.c (finish_base_specifier): cv-qualified base class
is fine, per DR 484.
/testsuite
2011-04-28 Paolo Carlini <paolo.carl...@oracle.com>
PR c++/48798
* g++.dg/inherit/pr48798.C: New.
* g++.old-deja/g++.other/base1.C: Adjust.
Index: testsuite/g++.old-deja/g++.other/base1.C
===================================================================
--- testsuite/g++.old-deja/g++.other/base1.C (revision 173116)
+++ testsuite/g++.old-deja/g++.other/base1.C (working copy)
@@ -3,8 +3,7 @@
// Copyright (C) 2000 Free Software Foundation, Inc.
// Contributed by Nathan Sidwell 25 Nov 2000 <nat...@codesourcery.com>
-// We lost information about which base wasn't an aggregate type, plus we
-// allowed cv qualifed bases via typedefs.
+// We lost information about which base wasn't an aggregate type.
typedef int I;
typedef int cI;
@@ -16,5 +15,5 @@ typedef A pA;
struct B : I {}; // { dg-error "" } not an aggregate
struct C : cI {}; // { dg-error "" } not an aggregate
-struct D : cA {}; // { dg-error "" } cv qualified
+struct D : cA {}; // cv-qualified is fine per DR 484
struct E : pA {};
Index: testsuite/g++.dg/inherit/pr48798.C
===================================================================
--- testsuite/g++.dg/inherit/pr48798.C (revision 0)
+++ testsuite/g++.dg/inherit/pr48798.C (revision 0)
@@ -0,0 +1,4 @@
+// PR c++/48798
+
+typedef struct A {} const t;
+struct B : t {};
Index: cp/semantics.c
===================================================================
--- cp/semantics.c (revision 173116)
+++ cp/semantics.c (working copy)
@@ -2766,7 +2766,8 @@ finish_base_specifier (tree base, tree access, boo
{
if (cp_type_quals (base) != 0)
{
- error ("base class %qT has cv qualifiers", base);
+ /* DR 484: Can a base-specifier name a cv-qualified
+ class type? */
base = TYPE_MAIN_VARIANT (base);
}
result = build_tree_list (access, base);