This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[C++ PATCH] Fix various variadic templates PRs


This patch fixes 10 (!) PRs filed against the variadic templates
implementation in 4.3. Most of the PRs are ice-on-invalid-code
problems. However, this patch also contains a restructuring of
coerce_template_parms, pulling out the functionality for coercing
template parameter packs into a new function,
coerce_template_parameter_pack. This restructuring it handles
parameter packs not at the end of the template parameter list better,
which can happen both in error cases and when there are template
parameters in function templates that have default arguments and come
*after* a parameter pack.

Testing i386-apple-darwin8.8.1 right now. Assuming no failures, okay
to commit to mainline?

- Doug

:ADDPATCH c++:

2007-04-16 Douglas Gregor <doug.gregor@gmail.com>

	PR c++/31431
	PR c++/31432
	PR c++/31434
	PR c++/31435
	PR c++/31437
	PR c++/31438
	PR c++/31442
	PR c++/31443
	PR c++/31444
	PR c++/31445
	* error.c (dump_type): Dump TYPE_ARGUMENT_PACK nodes.
	* cp-tree.h (check_for_bare_parameter_packs): Returns bool.
	* pt.c (check_for_bare_parameter_packs): Return bool indicated
	whether everything was okay. Fix indentation.
	(push_template_decl_real): Check for bare parameter packs in
	function parameters; where errors occur, mark the parameter types
	with ERROR_MARK_NODEs to avert ICEs.
	(coerce_template_parameter_pack): New.
	(coerce_template_parms): Moved parameter pack coercion into
	coerce_template_parameter_pack, and permit it anywhere in the
	template parameter list (not just at the end). Parameter and
	argument indices can vary (somewhat) separately now, so add
	PARM_IDX and ARG_IDX.
	(fn_type_unification): Don't set an argument pack as incomplete if
	no argument pack was deduced.
	(type_unification_real): If a type parameter is a parameter pack
	and has not otherwise been deduced, it will be deduced to an empty
	parameter pack.
	(more_specialized_fn): Use the actual lengths of the argument
	lists when comparing against expansions.
	* semantics.c (finish_member_declaration): If a field's type has
	bare parameter packs, error and set its type to ERROR_MARK_NODE.
	
2007-04-16  Douglas Gregor <doug.gregor@gmail.com>

	PR c++/31431
	PR c++/31432
	PR c++/31434
	PR c++/31435
	PR c++/31437
	PR c++/31438
	PR c++/31442
	PR c++/31443
	PR c++/31444
	PR c++/31445
	* g++.dg/cpp0x/pr31431.C: New.
	* g++.dg/cpp0x/pr31437.C: New.
	* g++.dg/cpp0x/pr31442.C: New.
	* g++.dg/cpp0x/pr31444.C: New.
	* g++.dg/cpp0x/pr31431-2.C: New.
	* g++.dg/cpp0x/pr31432.C: New.
	* g++.dg/cpp0x/pr31434.C: New.
	* g++.dg/cpp0x/pr31438.C: New.
	* g++.dg/cpp0x/pr31443.C: New.
	* g++.dg/cpp0x/pr31445.C: New.
	* g++.dg/cpp0x/variadic-crash1.C: New.

Attachment: vt-robust.patch
Description: Binary data


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]