From: Patrick Palka Date: Wed, 19 Jul 2023 20:11:38 +0000 (-0400) Subject: c++: deducing empty type vs non-type argument pack X-Git-Tag: basepoints/gcc-15~7483 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=74477d25a2c9e6790f3bc1e8b908fc32013614ca;p=thirdparty%2Fgcc.git c++: deducing empty type vs non-type argument pack Within a template parameter list, a non-type template parameter pack is represented as a PARM_DECL. But in a couple of spots where we need to deduce and create an empty argument pack, we test for TEMPLATE_PARM_INDEX (within a template parameter list) instead of for PARM_DECL, and so we end up creating a TYPE_ARGUMENT_PACK even in the non-type case. This patch fixes this (seemingly harmless) bug. gcc/cp/ChangeLog: * pt.cc (type_unification_real): Test for PARM_DECL instead of TEMPLATE_PARM_INDEX to distinguish a type vs non-type template parameter pack. (type_targs_deducible_from): Likewise. --- diff --git a/gcc/cp/pt.cc b/gcc/cp/pt.cc index d882e9dd1178..21b08a6266a5 100644 --- a/gcc/cp/pt.cc +++ b/gcc/cp/pt.cc @@ -23367,7 +23367,7 @@ type_unification_real (tree tparms, { tree arg; - if (TREE_CODE (tparm) == TEMPLATE_PARM_INDEX) + if (TREE_CODE (tparm) == PARM_DECL) { arg = make_node (NONTYPE_ARGUMENT_PACK); TREE_CONSTANT (arg) = 1; @@ -30398,7 +30398,7 @@ type_targs_deducible_from (tree tmpl, tree type) if (template_parameter_pack_p (tparm)) { tree arg; - if (TREE_CODE (tparm) == TEMPLATE_PARM_INDEX) + if (TREE_CODE (tparm) == PARM_DECL) { arg = make_node (NONTYPE_ARGUMENT_PACK); TREE_CONSTANT (arg) = 1;