From c2beae77c6e8fb2bd655bfc0c88bd29b162916b1 Mon Sep 17 00:00:00 2001 From: Kriang Lerdsuwanakij Date: Sat, 16 Dec 2000 07:47:22 +0000 Subject: [PATCH] pt.c (reduce_template_parm_level): Set DECL_ARTIFICIAL and DECL_TEMPLATE_PARM_P. * pt.c (reduce_template_parm_level): Set DECL_ARTIFICIAL and DECL_TEMPLATE_PARM_P. * g++.old-deja/g++.pt/ttp64.C: New test. From-SVN: r38300 --- gcc/cp/ChangeLog | 5 ++ gcc/cp/pt.c | 3 ++ gcc/testsuite/ChangeLog | 4 ++ gcc/testsuite/g++.old-deja/g++.pt/ttp64.C | 58 +++++++++++++++++++++++ 4 files changed, 70 insertions(+) create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/ttp64.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index a59a83513359..7437490bc31c 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2000-12-15 Kriang Lerdsuwanakij + + * pt.c (reduce_template_parm_level): Set DECL_ARTIFICIAL and + DECL_TEMPLATE_PARM_P. + 2000-12-15 Jason Merrill * init.c (build_new_1): Reorganize. Now with 100% fewer SAVE_EXPRs! diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 34540a84b33d..ac6fc165d51e 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -1791,6 +1791,9 @@ reduce_template_parm_level (index, type, levels) decl, type); TEMPLATE_PARM_DESCENDANTS (index) = t; + DECL_ARTIFICIAL (decl) = 1; + SET_DECL_TEMPLATE_PARM_P (decl); + /* Template template parameters need this. */ DECL_TEMPLATE_PARMS (decl) = DECL_TEMPLATE_PARMS (TEMPLATE_PARM_DECL (index)); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a12aab2af50e..b43a4628473a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2000-12-15 Kriang Lerdsuwanakij + + * g++.old-deja/g++.pt/ttp64.C: New test. + 2000-12-14 Kriang Lerdsuwanakij * g++.old-deja/g++.pt/spec33.C: New test. diff --git a/gcc/testsuite/g++.old-deja/g++.pt/ttp64.C b/gcc/testsuite/g++.old-deja/g++.pt/ttp64.C new file mode 100644 index 000000000000..c4665fc4bb34 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/ttp64.C @@ -0,0 +1,58 @@ +// Build don't link: + +// Origin: David Margery + +// Bug: We fail to set DECL_TEMPLATE_PARM_P when reducing template +// parameter level. + +template class A2 { +public: + A2() {}; + virtual ~A2() {}; + template A2 & operator=(const A2 o) { + i=o.i; + return *this; + }; + T i; + T j; +}; + +template class A1 { +public: + A1() {}; + virtual ~A1() {}; + template A1 & operator=(const A1 o) { + i=o.i; + return *this; + }; + template A1 & operator=(const A2 o) { + i=o.i; + return *this; + }; + T i; +}; + +template