PR c++/85135 - ICE with omitted template arguments.

* decl.c (grokdeclarator): Catch deduced class type in trailing
	return type.

From-SVN: r259092
This commit is contained in:
Jason Merrill 2018-04-04 12:42:55 -04:00 committed by Jason Merrill
parent 6173fb512f
commit 600583ab73
3 changed files with 33 additions and 10 deletions

View File

@ -1,5 +1,9 @@
2018-04-04 Jason Merrill <jason@redhat.com>
PR c++/85135 - ICE with omitted template arguments.
* decl.c (grokdeclarator): Catch deduced class type in trailing
return type.
PR c++/85133 - ICE with missing concept initializer.
* decl.c (cp_finish_decl): If a concept initializer is missing, use
true.

View File

@ -11100,20 +11100,29 @@ grokdeclarator (const cp_declarator *declarator,
name, type);
return error_mark_node;
}
if (tree tmpl = CLASS_PLACEHOLDER_TEMPLATE (auto_node))
tree tmpl = CLASS_PLACEHOLDER_TEMPLATE (auto_node);
if (!tmpl)
if (tree late_auto = type_uses_auto (late_return_type))
tmpl = CLASS_PLACEHOLDER_TEMPLATE (late_auto);
if (tmpl)
{
if (!late_return_type)
if (!dguide_name_p (unqualified_id))
{
if (dguide_name_p (unqualified_id))
error_at (declarator->id_loc, "deduction guide "
"for %qT must have trailing return "
"type", TREE_TYPE (tmpl));
else
error_at (declarator->id_loc, "deduced class "
"type %qT in function return type",
type);
error_at (declarator->id_loc, "deduced class "
"type %qD in function return type",
DECL_NAME (tmpl));
inform (DECL_SOURCE_LOCATION (tmpl),
"%qD declared here", tmpl);
return error_mark_node;
}
else if (!late_return_type)
{
error_at (declarator->id_loc, "deduction guide "
"for %qT must have trailing return "
"type", TREE_TYPE (tmpl));
inform (DECL_SOURCE_LOCATION (tmpl),
"%qD declared here", tmpl);
return error_mark_node;
}
else if (CLASS_TYPE_P (late_return_type)
&& CLASSTYPE_TEMPLATE_INFO (late_return_type)

View File

@ -0,0 +1,10 @@
// PR c++/85135
// { dg-do compile { target c++11 } }
template<int> struct A {};
auto foo() -> A; // { dg-error "A" }
template<typename> struct B {};
auto foo() -> A; // { dg-error "A" }