diff options
author | Paolo Carlini <paolo.carlini@oracle.com> | 2011-04-28 18:12:29 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2011-04-28 18:12:29 +0000 |
commit | 546a41977ba5c1eacb17a73ef46f05a744056993 (patch) | |
tree | c8505ef953cb6a8d3fdd8b8f6e793b0a6885d4d0 /gcc | |
parent | f62cd40949d0219d9c2c6e24afb0377fcde9d0e3 (diff) | |
download | gcc-546a41977ba5c1eacb17a73ef46f05a744056993.zip gcc-546a41977ba5c1eacb17a73ef46f05a744056993.tar.gz gcc-546a41977ba5c1eacb17a73ef46f05a744056993.tar.bz2 |
re PR c++/48798 (CV-qualified base class erroneously forbidden)
/cp
2011-04-28 Paolo Carlini <paolo.carlini@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.carlini@oracle.com>
PR c++/48798
* g++.dg/inherit/pr48798.C: New.
* g++.old-deja/g++.other/base1.C: Adjust.
From-SVN: r173124
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/semantics.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/inherit/pr48798.C | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.other/base1.C | 5 |
5 files changed, 20 insertions, 4 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 6b6d81bd..e34f03f 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2011-04-28 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/48798 + * semantics.c (finish_base_specifier): cv-qualified base class + is fine, per DR 484. + 2011-04-28 Dodji Seketeli <dodji@redhat.com> PR c++/48656 diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index 722e57f..815824a 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -2767,7 +2767,8 @@ finish_base_specifier (tree base, tree access, bool virtual_p) { 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); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b0d5e1c..8d0d6a9 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2011-04-28 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/48798 + * g++.dg/inherit/pr48798.C: New. + * g++.old-deja/g++.other/base1.C: Adjust. + 2011-04-28 Dodji Seketeli <dodji@redhat.com> PR c++/48656 diff --git a/gcc/testsuite/g++.dg/inherit/pr48798.C b/gcc/testsuite/g++.dg/inherit/pr48798.C new file mode 100644 index 0000000..cc9921e --- /dev/null +++ b/gcc/testsuite/g++.dg/inherit/pr48798.C @@ -0,0 +1,4 @@ +// PR c++/48798 + +typedef struct A {} const t; +struct B : t {}; diff --git a/gcc/testsuite/g++.old-deja/g++.other/base1.C b/gcc/testsuite/g++.old-deja/g++.other/base1.C index 3c9ac26..b38a654 100644 --- a/gcc/testsuite/g++.old-deja/g++.other/base1.C +++ b/gcc/testsuite/g++.old-deja/g++.other/base1.C @@ -3,8 +3,7 @@ // Copyright (C) 2000 Free Software Foundation, Inc. // Contributed by Nathan Sidwell 25 Nov 2000 <nathan@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 {}; |