Message ID | 20230718151807.665487-1-ppalka@redhat.com |
---|---|
State | New |
Headers | show |
Series | c++: deducing empty type vs non-type argument pack | expand |
On 7/18/23 11:18, Patrick Palka wrote: > Bootstrapped and regtested on x86_64-pc-linux-gnu, does this look OK for > trunk? Also verified by way of gcc_assert that we never see > TEMPLATE_PARM_INDEX here. OK. > -- >8 -- > > 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 an empty argument pack, we test for TEMPLATE_PARM_INDEX (within a > template parameter list) instead of for PARM_DECL, which means we end up > using 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. > --- > gcc/cp/pt.cc | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/gcc/cp/pt.cc b/gcc/cp/pt.cc > index 3987ffc509a..d342ab5929a 100644 > --- a/gcc/cp/pt.cc > +++ b/gcc/cp/pt.cc > @@ -23345,7 +23345,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; > @@ -30369,7 +30369,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;
diff --git a/gcc/cp/pt.cc b/gcc/cp/pt.cc index 3987ffc509a..d342ab5929a 100644 --- a/gcc/cp/pt.cc +++ b/gcc/cp/pt.cc @@ -23345,7 +23345,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; @@ -30369,7 +30369,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;