Commit 6e2993bf by Mark Mitchell Committed by Mark Mitchell

pt.c (tsubst_function_type): Do not permit function types which return arrays or functions.

	* pt.c (tsubst_function_type): Do not permit function types which
	return arrays or functions.

	* g++.dg/template/deduce3.C: New test.

From-SVN: r91186
parent f5523e6d
2004-11-24 Mark Mitchell <mark@codesourcery.com> 2004-11-24 Mark Mitchell <mark@codesourcery.com>
* pt.c (tsubst_function_type): Do not permit function types which
return arrays or functions.
PR c++/18586 PR c++/18586
* parser.c (cp_parser_init_declarator): Do not pop scope twice. * parser.c (cp_parser_init_declarator): Do not pop scope twice.
......
...@@ -6732,6 +6732,22 @@ tsubst_function_type (tree t, ...@@ -6732,6 +6732,22 @@ tsubst_function_type (tree t,
return_type = tsubst (TREE_TYPE (t), args, complain, in_decl); return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
if (return_type == error_mark_node) if (return_type == error_mark_node)
return error_mark_node; return error_mark_node;
/* The standard does not presently indicate that creation of a
function type with an invalid return type is a deduction failure.
However, that is clearly analagous to creating an array of "void"
or a reference to a reference. This is core issue #486. */
if (TREE_CODE (return_type) == ARRAY_TYPE
|| TREE_CODE (return_type) == FUNCTION_TYPE)
{
if (complain & tf_error)
{
if (TREE_CODE (return_type) == ARRAY_TYPE)
error ("function returning an array");
else
error ("function returning a function");
}
return error_mark_node;
}
/* Substitute the argument types. */ /* Substitute the argument types. */
arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args, arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
......
2004-11-24 Mark Mitchell <mark@codesourcery.com> 2004-11-24 Mark Mitchell <mark@codesourcery.com>
* g++.dg/template/deduce3.C: New test.
PR c++/18586 PR c++/18586
* g++.dg/template/crash27.C: New test. * g++.dg/template/crash27.C: New test.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment