Commit eff9c61d by Jason Merrill

PR c++/92531 - ICE with noexcept(lambda).

This was failing because uses_template_parms didn't recognize LAMBDA_EXPR as
a kind of expression.  Instead of trying to enumerate all the different
varieties of expression and then aborting if what's left isn't
error_mark_node, let's handle error_mark_node and then assume anything else
is an expression.

	* pt.c (uses_template_parms): Don't try to enumerate all the
	expression cases.
parent c60a18f8
2020-01-17 Jason Merrill <jason@redhat.com>
PR c++/92531 - ICE with noexcept(lambda).
* pt.c (uses_template_parms): Don't try to enumerate all the
expression cases.
2020-01-17 Jakub Jelinek <jakub@redhat.com>
PR c++/93228
......
......@@ -10537,22 +10537,11 @@ uses_template_parms (tree t)
|| uses_template_parms (TREE_CHAIN (t)));
else if (TREE_CODE (t) == TYPE_DECL)
dependent_p = dependent_type_p (TREE_TYPE (t));
else if (DECL_P (t)
|| EXPR_P (t)
|| TREE_CODE (t) == TEMPLATE_PARM_INDEX
|| TREE_CODE (t) == OVERLOAD
|| BASELINK_P (t)
|| identifier_p (t)
|| TREE_CODE (t) == TRAIT_EXPR
|| TREE_CODE (t) == CONSTRUCTOR
|| CONSTANT_CLASS_P (t))
else if (t == error_mark_node)
dependent_p = false;
else
dependent_p = (type_dependent_expression_p (t)
|| value_dependent_expression_p (t));
else
{
gcc_assert (t == error_mark_node);
dependent_p = false;
}
processing_template_decl = saved_processing_template_decl;
......
// PR c++/92531
// { dg-do compile { target c++17 } }
template <typename XK>
void ky () noexcept ([]{}); // IFNDR
// Optional error: void(*)() to bool conv in converted constant expression
// { dg-prune-output "converted constant expression" }
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