re PR c++/42697 (ice-on-legal-code: template class template function local objects)
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. From-SVN: r155975
This commit is contained in:
parent
a90110c3df
commit
4548cb4b83
@ -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
|
||||
|
@ -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. */
|
||||
|
@ -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
|
||||
|
28
gcc/testsuite/g++.dg/template/crash94.C
Normal file
28
gcc/testsuite/g++.dg/template/crash94.C
Normal file
@ -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>;
|
Loading…
Reference in New Issue
Block a user