From e5375c849faaaca4a757c06e8a2cf9db0bc0c64b Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Fri, 18 Mar 2016 15:57:58 +0000 Subject: [PATCH] Backport PR c++/61198 fix gcc: 2014-12-19 Kai Tietz PR c++/61198 * pt.c (most_general_template): Don't break for template-alias. gcc/testsuite: 2014-12-19 Kai Tietz Paolo Carlini PR c++/61198 * g++.dg/cpp0x/alias-decl-45.C: New file. From-SVN: r234337 --- gcc/cp/ChangeLog | 8 ++++++++ gcc/cp/pt.c | 1 + gcc/testsuite/ChangeLog | 9 ++++++++ gcc/testsuite/g++.dg/cpp0x/alias-decl-45.C | 24 ++++++++++++++++++++++ 4 files changed, 42 insertions(+) create mode 100644 gcc/testsuite/g++.dg/cpp0x/alias-decl-45.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 11a92254cbd7..2f565db17f5d 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,11 @@ +2016-03-18 Jonathan Wakely + + Backported from mainline + 2014-12-19 Kai Tietz + + PR c++/61198 + * pt.c (most_general_template): Don't break for template-alias. + 2016-03-03 Jason Merrill PR c++/65061 diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 5bcdb156bb35..cece89ea3012 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -18873,6 +18873,7 @@ most_general_template (tree decl) break; if (CLASS_TYPE_P (TREE_TYPE (decl)) + && !TYPE_DECL_ALIAS_P (TYPE_NAME (TREE_TYPE (decl))) && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl))) break; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d75573b994a8..548764efe516 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,12 @@ +2016-03-18 Jonathan Wakely + + Backported from mainline + 2014-12-19 Kai Tietz + Paolo Carlini + + PR c++/61198 + * g++.dg/cpp0x/alias-decl-45.C: New file. + 2016-03-15 Bernd Schmidt Backport from mainline diff --git a/gcc/testsuite/g++.dg/cpp0x/alias-decl-45.C b/gcc/testsuite/g++.dg/cpp0x/alias-decl-45.C new file mode 100644 index 000000000000..e3434f51a391 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/alias-decl-45.C @@ -0,0 +1,24 @@ +// PR c++/61198 +// { dg-do compile { target c++11 } } + +template +struct broken +{ + template + using rebind = broken; +}; + +template +struct broken<2, derp_t> +{ + template + using rebind = broken<2, target_t>; +}; + +int main(int argc, char **argv) +{ + broken<2, float>::rebind u; + + return 0; +} + -- 2.47.2