From: Marc Glisse Date: Mon, 9 Jun 2014 15:07:24 +0000 (+0200) Subject: re PR c++/54442 (Const overloads resolution failure) X-Git-Tag: releases/gcc-5.1.0~7001 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=00f30445f42d7a01e60455deaa9c7db23508099d;p=thirdparty%2Fgcc.git re PR c++/54442 (Const overloads resolution failure) 2014-06-09 Marc Glisse 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b8de64b93c17..dd8cd87a49d8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2014-06-09 Marc Glisse + + PR c++/54442 + * tree.c (build_qualified_type): Use a canonical type for + TYPE_CANONICAL. + 2014-06-09 Ramana Radhakrishnan * config/arm/arm-modes.def: Remove XFmode. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f3b2c6ab4279..b3e391a130cc 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2014-06-09 Marc Glisse + + PR c++/54442 + * g++.dg/pr54442.C: New file. + 2014-06-09 Paul Thomas PR fortran/61406 diff --git a/gcc/testsuite/g++.dg/pr54442.C b/gcc/testsuite/g++.dg/pr54442.C new file mode 100644 index 000000000000..a489565616e6 --- /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 9d8e6316c587..7c1dbd59aeb8 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;