diff options
author | Marc Glisse <marc.glisse@inria.fr> | 2014-06-09 17:07:24 +0200 |
---|---|---|
committer | Marc Glisse <glisse@gcc.gnu.org> | 2014-06-09 15:07:24 +0000 |
commit | 00f30445f42d7a01e60455deaa9c7db23508099d (patch) | |
tree | e4d103486cf728d06df6c25f7d915f0955754d23 /gcc | |
parent | 109a3af40faf2fe7b93cefcdca45029714fe800d (diff) | |
download | gcc-00f30445f42d7a01e60455deaa9c7db23508099d.zip gcc-00f30445f42d7a01e60455deaa9c7db23508099d.tar.gz gcc-00f30445f42d7a01e60455deaa9c7db23508099d.tar.bz2 |
re PR c++/54442 (Const overloads resolution failure)
2014-06-09 Marc Glisse <marc.glisse@inria.fr>
PR c++/54442
gcc/
* tree.c (build_qualified_type): Use a canonical type for
TYPE_CANONICAL.
gcc/testsuite/
* g++.dg/pr54442.C: New file.
From-SVN: r211377
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/pr54442.C | 12 | ||||
-rw-r--r-- | gcc/tree.c | 6 |
4 files changed, 27 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b8de64b..dd8cd87 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2014-06-09 Marc Glisse <marc.glisse@inria.fr> + + PR c++/54442 + * tree.c (build_qualified_type): Use a canonical type for + TYPE_CANONICAL. + 2014-06-09 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com> * config/arm/arm-modes.def: Remove XFmode. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f3b2c6a..b3e391a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2014-06-09 Marc Glisse <marc.glisse@inria.fr> + + PR c++/54442 + * g++.dg/pr54442.C: New file. + 2014-06-09 Paul Thomas <pault@gcc.gnu.org> PR fortran/61406 diff --git a/gcc/testsuite/g++.dg/pr54442.C b/gcc/testsuite/g++.dg/pr54442.C new file mode 100644 index 0000000..a489565 --- /dev/null +++ b/gcc/testsuite/g++.dg/pr54442.C @@ -0,0 +1,12 @@ +/* { dg-do compile } */ + +struct S +{ + void s (int) const throw (); + void s (int) throw (); +}; + +typedef int index_t; + +void (S::*f) (index_t) = &S::s; +void (S::*g) (index_t) const = &S::s; @@ -6326,8 +6326,10 @@ build_qualified_type (tree type, int type_quals) else if (TYPE_CANONICAL (type) != type) /* Build the underlying canonical type, since it is different from TYPE. */ - TYPE_CANONICAL (t) = build_qualified_type (TYPE_CANONICAL (type), - type_quals); + { + tree c = build_qualified_type (TYPE_CANONICAL (type), type_quals); + TYPE_CANONICAL (t) = TYPE_CANONICAL (c); + } else /* T is its own canonical type. */ TYPE_CANONICAL (t) = t; |