From 0d4a73c6abe635f0eac4ceb140edb5379ea08827 Mon Sep 17 00:00:00 2001 From: jakub Date: Fri, 30 Nov 2012 23:51:26 +0000 Subject: [PATCH] PR c++/55542 * pt.c (make_ith_pack_parameter_name): Return NULL if name is NULL. (tsubst_decl): Call make_ith_pack_parameter_name even if DECL_NAME is NULL. * g++.dg/cpp0x/vt-55542.C: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@194010 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/cp/ChangeLog | 8 ++++++++ gcc/cp/pt.c | 9 +++++---- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/cpp0x/vt-55542.C | 22 ++++++++++++++++++++++ 4 files changed, 40 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/g++.dg/cpp0x/vt-55542.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 60211d8add0..b419f648a27 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,11 @@ +2012-12-01 Jakub Jelinek + + PR c++/55542 + * pt.c (make_ith_pack_parameter_name): Return NULL if + name is NULL. + (tsubst_decl): Call make_ith_pack_parameter_name even if + DECL_NAME is NULL. + 2012-11-29 Jason Merrill PR c++/53137 diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 3bc0d64d6ba..e349be6c4ab 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -2905,6 +2905,8 @@ make_ith_pack_parameter_name (tree name, int i) char* newname; int newname_len; + if (name == NULL_TREE) + return name; snprintf (numbuf, NUMBUF_LEN, "%i", i); newname_len = IDENTIFIER_LENGTH (name) + strlen (numbuf) + 2; @@ -10261,10 +10263,9 @@ tsubst_decl (tree t, tree args, tsubst_flags_t complain) /* Get the Ith type. */ type = TREE_VEC_ELT (expanded_types, i); - if (DECL_NAME (r)) - /* Rename the parameter to include the index. */ - DECL_NAME (r) = - make_ith_pack_parameter_name (DECL_NAME (r), i); + /* Rename the parameter to include the index. */ + DECL_NAME (r) + = make_ith_pack_parameter_name (DECL_NAME (r), i); } else if (!type) /* We're dealing with a normal parameter. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 573e3906357..a5e29e28d6b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2012-12-01 Jakub Jelinek + + PR c++/55542 + * g++.dg/cpp0x/vt-55542.C: New test. + 2012-11-30 Eric Botcazou * gnat.dg/specs/pack9.ads: New test. diff --git a/gcc/testsuite/g++.dg/cpp0x/vt-55542.C b/gcc/testsuite/g++.dg/cpp0x/vt-55542.C new file mode 100644 index 00000000000..3d5efee87d9 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/vt-55542.C @@ -0,0 +1,22 @@ +// PR c++/55542 +// { dg-options "-std=c++11" } + +template +struct B +{ + template + B (O *o, void (O::*f) (P ... p)) {} +}; +class C +{ + void foo (void *, int); + template + void bar (A ... a); + B c; + B d; + C (int) : c (this, &C::bar), d (this, &C::foo) {} +}; +template +void C::bar (A ...) +{ +} -- 2.11.4.GIT