re PR c++/51852 ([c++11] tree check: expected tree_list, have HßèMÕþÿøtxøtsø)

PR c++/51852
	* pt.c (tsubst_pack_expansion): Delete and restore
	local_specialization whenever need_local_specialization, not just
	when saved_local_specializations is non-NULL.

	* g++.dg/other/gc5.C: New test.

From-SVN: r183637
This commit is contained in:
Jakub Jelinek 2012-01-27 18:55:55 +01:00 committed by Jakub Jelinek
parent b6c71f7771
commit 8c71382973
4 changed files with 40 additions and 1 deletions

View File

@ -1,3 +1,10 @@
2012-01-27 Jakub Jelinek <jakub@redhat.com>
PR c++/51852
* pt.c (tsubst_pack_expansion): Delete and restore
local_specialization whenever need_local_specialization, not just
when saved_local_specializations is non-NULL.
2012-01-26 Paolo Carlini <paolo.carlini@oracle.com> 2012-01-26 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/51370 PR c++/51370

View File

@ -9582,7 +9582,7 @@ tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
} }
} }
if (saved_local_specializations) if (need_local_specializations)
{ {
htab_delete (local_specializations); htab_delete (local_specializations);
local_specializations = saved_local_specializations; local_specializations = saved_local_specializations;

View File

@ -1,3 +1,8 @@
2012-01-27 Jakub Jelinek <jakub@redhat.com>
PR c++/51852
* g++.dg/other/gc5.C: New test.
2012-01-27 Richard Guenther <rguenther@suse.de> 2012-01-27 Richard Guenther <rguenther@suse.de>
PR tree-optimization/50444 PR tree-optimization/50444

View File

@ -0,0 +1,27 @@
// PR c++/51852
// { dg-do compile }
// { dg-options "-std=gnu++11 --param ggc-min-heapsize=0 --param ggc-min-expand=0" }
template <typename, typename>
class transformed {};
template <class R, class F>
transformed<F, R> transform (R r, F f);
template <typename, typename>
class joined {};
template <typename T, typename U>
joined<T, U> join (T t, U u);
template <typename T, typename U, typename V, typename... Rest>
auto join (T t, U u, V v, Rest... rest) -> decltype (join (join (t, u), v, rest...));
template <typename F, typename... Rs>
auto polymorphic_transform (F f, Rs... rs) -> decltype (join (transform(rs, f)...));
int
main ()
{
polymorphic_transform (0, 0, 0);
}