diff options
author | Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net> | 2000-12-16 07:47:22 +0000 |
---|---|---|
committer | Kriang Lerdsuwanakij <lerdsuwa@gcc.gnu.org> | 2000-12-16 07:47:22 +0000 |
commit | c2beae77c6e8fb2bd655bfc0c88bd29b162916b1 (patch) | |
tree | 7bb47107236c646377bf3c8a6506bf34d4bcc6f3 /gcc | |
parent | 3cd4948faf369ffe86e000f77f2daeea8ab7e84e (diff) | |
download | gcc-c2beae77c6e8fb2bd655bfc0c88bd29b162916b1.zip gcc-c2beae77c6e8fb2bd655bfc0c88bd29b162916b1.tar.gz gcc-c2beae77c6e8fb2bd655bfc0c88bd29b162916b1.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/pt.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.pt/ttp64.C | 58 |
4 files changed, 70 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index a59a835..7437490 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2000-12-15 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net> + + * pt.c (reduce_template_parm_level): Set DECL_ARTIFICIAL and + DECL_TEMPLATE_PARM_P. + 2000-12-15 Jason Merrill <jason@redhat.com> * 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 34540a8..ac6fc16 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 a12aab2..b43a462 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2000-12-15 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net> + + * g++.old-deja/g++.pt/ttp64.C: New test. + 2000-12-14 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net> * 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 0000000..c4665fc --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/ttp64.C @@ -0,0 +1,58 @@ +// Build don't link: + +// Origin: David Margery <David.Margery@irisa.fr> + +// Bug: We fail to set DECL_TEMPLATE_PARM_P when reducing template +// parameter level. + +template <class T> class A2 { +public: + A2() {}; + virtual ~A2() {}; + template <class other> A2 & operator=(const A2<other> o) { + i=o.i; + return *this; + }; + T i; + T j; +}; + +template <class T> class A1 { +public: + A1() {}; + virtual ~A1() {}; + template <class other> A1 & operator=(const A1<other> o) { + i=o.i; + return *this; + }; + template <class other> A1 & operator=(const A2<other> o) { + i=o.i; + return *this; + }; + T i; +}; + +template <template <class U> class T> class B { +public: + B(){}; + virtual ~B(){}; + template <template <class U2> class O> struct rebind { typedef B<O> other ;}; + template <template <class U2> class O> B & operator=(const B<O> o) { + i=o.i; + return *this; + }; + T<int> i; +}; + +int main(int argc, char *argv[]) { + + A1<int> a1; + A1<long> a2; + a1=a2; + + B<A1 > b1; + B<A2 > b2; + b1=b2; + + return 0; +} |