2017-02-17 Jason Merrill <jason@redhat.com>
+ PR c++/79549 - C++17 ICE with non-type auto template parameter pack
+ * pt.c (convert_template_argument): Just return an auto arg pack.
+ (tsubst_template_args): Don't tsubst an auto pack type.
+
PR c++/79556 - C++17 ICE with non-type auto
* pt.c (do_auto_deduction): Don't try to deduce from null type.
if (tree a = type_uses_auto (t))
{
+ if (ARGUMENT_PACK_P (orig_arg))
+ /* There's nothing to check for an auto argument pack. */
+ return orig_arg;
+
t = do_auto_deduction (t, arg, a, complain, adc_unify, args);
if (t == error_mark_node)
return error_mark_node;
new_arg = error_mark_node;
if (TREE_CODE (new_arg) == NONTYPE_ARGUMENT_PACK) {
- TREE_TYPE (new_arg) = tsubst (TREE_TYPE (orig_arg), args,
- complain, in_decl);
+ if (type_uses_auto (TREE_TYPE (orig_arg)))
+ TREE_TYPE (new_arg) = TREE_TYPE (orig_arg);
+ else
+ TREE_TYPE (new_arg) = tsubst (TREE_TYPE (orig_arg), args,
+ complain, in_decl);
TREE_CONSTANT (new_arg) = TREE_CONSTANT (orig_arg);
if (TREE_TYPE (new_arg) == error_mark_node)