aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMarc Glisse <marc.glisse@inria.fr>2014-06-09 17:07:24 +0200
committerMarc Glisse <glisse@gcc.gnu.org>2014-06-09 15:07:24 +0000
commit00f30445f42d7a01e60455deaa9c7db23508099d (patch)
treee4d103486cf728d06df6c25f7d915f0955754d23 /gcc
parent109a3af40faf2fe7b93cefcdca45029714fe800d (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/pr54442.C12
-rw-r--r--gcc/tree.c6
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;
diff --git a/gcc/tree.c b/gcc/tree.c
index 9d8e631..7c1dbd5 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -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;