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.
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)