diff options
| author | dodji <dodji@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-01-17 10:24:16 +0000 |
|---|---|---|
| committer | dodji <dodji@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-01-17 10:24:16 +0000 |
| commit | f7fb17aeea91c8456b3d523de017c6a583fe5d79 (patch) | |
| tree | d1b36373452b558ec08f6d1810d30ccf674a5f7d | |
| parent | 40dbcb16da5ec49099c627c8b9eaddbab1dc22d7 (diff) | |
| download | ppe42-gcc-f7fb17aeea91c8456b3d523de017c6a583fe5d79.tar.gz ppe42-gcc-f7fb17aeea91c8456b3d523de017c6a583fe5d79.zip | |
Fix PR c++/42697
gcc/cp/ChangeLog:
PR c++/42697
*pt.c (tsubst_decl): Get the arguments of a specialization from
the specialization template, not from the most general template.
gcc/testsuite/ChangeLog:
PR c++/42697
* g++.dg/template/crash94.C: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@155975 138bc75d-0d04-0410-961f-82ee72b054a4
| -rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
| -rw-r--r-- | gcc/cp/pt.c | 3 | ||||
| -rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
| -rw-r--r-- | gcc/testsuite/g++.dg/template/crash94.C | 28 |
4 files changed, 41 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 08307272a00..dc563cc2524 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2010-01-17 Dodji Seketeli <dodji@redhat.com> + + PR c++/42697 + *pt.c (tsubst_decl): Get the arguments of a specialization from + the specialization template, not from the most general template. + 2010-01-16 Jason Merrill <jason@redhat.com> PR c++/42761 diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index f27b931edd8..0acb8606419 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -8825,7 +8825,8 @@ tsubst_decl (tree t, tree args, tsubst_flags_t complain) specialize R. */ gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t)); argvec = tsubst_template_args (DECL_TI_ARGS - (DECL_TEMPLATE_RESULT (gen_tmpl)), + (DECL_TEMPLATE_RESULT + (DECL_TI_TEMPLATE (t))), args, complain, in_decl); /* Check to see if we already have this specialization. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 1302d42db3a..8211355516b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-01-17 Dodji Seketeli <dodji@redhat.com> + + PR c++/42697 + * g++.dg/template/crash94.C: New test. + 2010-01-17 Jie Zhang <jie.zhang@analog.com> PR debug/42767 diff --git a/gcc/testsuite/g++.dg/template/crash94.C b/gcc/testsuite/g++.dg/template/crash94.C new file mode 100644 index 00000000000..810aed0a61c --- /dev/null +++ b/gcc/testsuite/g++.dg/template/crash94.C @@ -0,0 +1,28 @@ +// Origin: PR c++/42697 +// { dg-do compile } + +template<class Value_t> +class fparser +{ + template<bool Option> + void eval2(Value_t r[2]); +public: + void evaltest(); +}; + +template<> +template<bool Option> +void fparser<int>::eval2(int r[2]) +{ + struct ObjType {}; +} + + +template<class Value_t> +void fparser<Value_t>::evaltest + () +{ + eval2<false>(0); +} + +template class fparser<int>; |

