public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Jason Merrill <jason@redhat.com>
To: Patrick Palka <ppalka@redhat.com>, gcc-patches@gcc.gnu.org
Subject: Re: [PATCH 2/2] c++: Remove SET_PACK_EXPANSION_PATTERN / SET_ARGUMENT_PACK_ARGS
Date: Tue, 10 May 2022 10:17:17 -0400	[thread overview]
Message-ID: <6b24452a-5e32-31b8-91ed-efcc87aa2ed2@redhat.com> (raw)
In-Reply-To: <20220510134037.628893-2-ppalka@redhat.com>

On 5/10/22 09:40, Patrick Palka wrote:
> Unlike in C, in C++ the conditional operator yields an lvalue if both
> branches are lvalues, so we can just assign to PACK_EXPANSION_PATTERN
> and ARGUMENT_PACK_ARGS directly.
> 
> Bootstrapped and regtested on x86_64-pc-linux-gnu, does this look OK for
> trunk?

OK.

> gcc/cp/ChangeLog:
> 
> 	* coroutines.cc (instantiate_coro_traits): Adjust accordingly.
> 	* cp-tree.h (SET_PACK_EXPANSION_PATTERN): Remove.
> 	(SET_ARGUMENT_PACK_ARGS): Remove.
> 	* module.cc (trees_in::tree_node): Adjust accordingly.
> 	* parser.cc (make_char_string_pack): Likewise.
> 	(make_string_pack): Likewise.
> 	* pt.cc (make_pack_expansion): Likewise.
> 	(template_parm_to_arg): Likewise.
> 	(coerce_template_parameter_pack): Likewise.
> 	(extract_fnparm_pack): Likewise.
> 	(extract_locals_r): Likewise.
> 	(make_argument_pack): Likewise.
> 	(tsubst_argument_pack): Likewise.
> 	(lookup_init_capture_pack): Likewise.
> 	(type_unification_real): Likewise.
> 	(unify_pack_expansion): Likewise.
> 	(tsubst_initializer_list): Likewise.
> ---
>   gcc/cp/coroutines.cc |  2 +-
>   gcc/cp/cp-tree.h     | 16 ----------------
>   gcc/cp/module.cc     |  4 ++--
>   gcc/cp/parser.cc     |  4 ++--
>   gcc/cp/pt.cc         | 30 +++++++++++++++---------------
>   5 files changed, 20 insertions(+), 36 deletions(-)
> 
> diff --git a/gcc/cp/coroutines.cc b/gcc/cp/coroutines.cc
> index 1d886b31c77..edb3b706ddc 100644
> --- a/gcc/cp/coroutines.cc
> +++ b/gcc/cp/coroutines.cc
> @@ -344,7 +344,7 @@ instantiate_coro_traits (tree fndecl, location_t kw)
>       }
>   
>     tree argtypepack = cxx_make_type (TYPE_ARGUMENT_PACK);
> -  SET_ARGUMENT_PACK_ARGS (argtypepack, argtypes);
> +  ARGUMENT_PACK_ARGS (argtypepack) = argtypes;
>   
>     tree targ = make_tree_vec (2);
>     TREE_VEC_ELT (targ, 0) = TREE_TYPE (functyp);
> diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h
> index 29fc0e5f829..cfda8337ad8 100644
> --- a/gcc/cp/cp-tree.h
> +++ b/gcc/cp/cp-tree.h
> @@ -3903,14 +3903,6 @@ struct GTY(()) lang_decl {
>     (TREE_CODE (PACK_EXPANSION_CHECK (NODE)) == TYPE_PACK_EXPANSION \
>      ? TREE_TYPE (NODE) : TREE_OPERAND (NODE, 0))
>   
> -/* Sets the type or expression pattern for a TYPE_PACK_EXPANSION or
> -   EXPR_PACK_EXPANSION.  */
> -#define SET_PACK_EXPANSION_PATTERN(NODE,VALUE)  \
> -  if (TREE_CODE (PACK_EXPANSION_CHECK (NODE)) == TYPE_PACK_EXPANSION)  \
> -    TREE_TYPE (NODE) = VALUE;                   \
> -  else                                          \
> -    TREE_OPERAND (NODE, 0) = VALUE
> -
>   /* The list of parameter packs used in the PACK_EXPANSION_* node. The
>      TREE_VALUE of each TREE_LIST contains the parameter packs.  */
>   #define PACK_EXPANSION_PARAMETER_PACKS(NODE)		\
> @@ -3963,14 +3955,6 @@ struct GTY(()) lang_decl {
>     (TREE_CODE (ARGUMENT_PACK_CHECK (NODE)) == TYPE_ARGUMENT_PACK \
>      ? TREE_TYPE (NODE) : TREE_OPERAND (NODE, 0))
>   
> -/* Set the arguments stored in an argument pack. VALUE must be a
> -   TREE_VEC.  */
> -#define SET_ARGUMENT_PACK_ARGS(NODE,VALUE)     \
> -  if (TREE_CODE (ARGUMENT_PACK_CHECK (NODE)) == TYPE_ARGUMENT_PACK)  \
> -    TREE_TYPE (NODE) = VALUE;                           \
> -  else                                                  \
> -    TREE_OPERAND (NODE, 0) = VALUE
> -
>   /* Whether the argument pack is "incomplete", meaning that more
>      arguments can still be deduced. Incomplete argument packs are only
>      used when the user has provided an explicit template argument list
> diff --git a/gcc/cp/module.cc b/gcc/cp/module.cc
> index bd4771bef72..27b8f64ce75 100644
> --- a/gcc/cp/module.cc
> +++ b/gcc/cp/module.cc
> @@ -9338,7 +9338,7 @@ trees_in::tree_node (bool is_use)
>   	    if (!get_overrun ())
>   	      {
>   		tree pack = cxx_make_type (TYPE_ARGUMENT_PACK);
> -		SET_ARGUMENT_PACK_ARGS (pack, res);
> +		ARGUMENT_PACK_ARGS (pack) = res;
>   		res = pack;
>   	      }
>   	    break;
> @@ -9351,7 +9351,7 @@ trees_in::tree_node (bool is_use)
>   		{
>   		  tree expn = cxx_make_type (TYPE_PACK_EXPANSION);
>   		  SET_TYPE_STRUCTURAL_EQUALITY (expn);
> -		  SET_PACK_EXPANSION_PATTERN (expn, res);
> +		  PACK_EXPANSION_PATTERN (expn) = res;
>   		  PACK_EXPANSION_PARAMETER_PACKS (expn) = param_packs;
>   		  PACK_EXPANSION_LOCAL_P (expn) = local;
>   		  res = expn;
> diff --git a/gcc/cp/parser.cc b/gcc/cp/parser.cc
> index 5071c030f53..4ed9feaa427 100644
> --- a/gcc/cp/parser.cc
> +++ b/gcc/cp/parser.cc
> @@ -4649,7 +4649,7 @@ make_char_string_pack (tree value)
>       }
>   
>     /* Build the argument packs.  */
> -  SET_ARGUMENT_PACK_ARGS (argpack, charvec);
> +  ARGUMENT_PACK_ARGS (argpack) = charvec;
>   
>     TREE_VEC_ELT (argvec, 0) = argpack;
>   
> @@ -4684,7 +4684,7 @@ make_string_pack (tree value)
>   			    double_int::from_buffer (str + i * sz, sz));
>   
>     /* Build the argument packs.  */
> -  SET_ARGUMENT_PACK_ARGS (argpack, charvec);
> +  ARGUMENT_PACK_ARGS (argpack) = charvec;
>   
>     TREE_VEC_ELT (argvec, 1) = argpack;
>   
> diff --git a/gcc/cp/pt.cc b/gcc/cp/pt.cc
> index 6e666c2cde3..9932d861af6 100644
> --- a/gcc/cp/pt.cc
> +++ b/gcc/cp/pt.cc
> @@ -4219,7 +4219,7 @@ make_pack_expansion (tree arg, tsubst_flags_t complain)
>   
>         /* Create the pack expansion type for the base type.  */
>         purpose = cxx_make_type (TYPE_PACK_EXPANSION);
> -      SET_PACK_EXPANSION_PATTERN (purpose, TREE_PURPOSE (arg));
> +      PACK_EXPANSION_PATTERN (purpose) = TREE_PURPOSE (arg);
>         PACK_EXPANSION_PARAMETER_PACKS (purpose) = parameter_packs;
>         PACK_EXPANSION_LOCAL_P (purpose) = at_function_scope_p ();
>   
> @@ -4237,7 +4237,7 @@ make_pack_expansion (tree arg, tsubst_flags_t complain)
>     result = for_types
>        ? cxx_make_type (TYPE_PACK_EXPANSION)
>        : make_node (EXPR_PACK_EXPANSION);
> -  SET_PACK_EXPANSION_PATTERN (result, arg);
> +  PACK_EXPANSION_PATTERN (result) = arg;
>     if (TREE_CODE (result) == EXPR_PACK_EXPANSION)
>       {
>         /* Propagate type and const-expression information.  */
> @@ -4852,7 +4852,7 @@ template_parm_to_arg (tree t)
>   	  TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
>   
>   	  t = cxx_make_type (TYPE_ARGUMENT_PACK);
> -	  SET_ARGUMENT_PACK_ARGS (t, vec);
> +	  ARGUMENT_PACK_ARGS (t) = vec;
>   	}
>       }
>     else
> @@ -4869,7 +4869,7 @@ template_parm_to_arg (tree t)
>   	  TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
>   
>   	  t  = make_node (NONTYPE_ARGUMENT_PACK);
> -	  SET_ARGUMENT_PACK_ARGS (t, vec);
> +	  ARGUMENT_PACK_ARGS (t) = vec;
>   	}
>         else
>   	t = convert_from_reference (t);
> @@ -8718,7 +8718,7 @@ coerce_template_parameter_pack (tree parms,
>   	 _DECL as a use rather than a declaration.  */
>         tree decl = TREE_VALUE (parm);
>         tree exp = cxx_make_type (TYPE_PACK_EXPANSION);
> -      SET_PACK_EXPANSION_PATTERN (exp, decl);
> +      PACK_EXPANSION_PATTERN (exp) = decl;
>         PACK_EXPANSION_PARAMETER_PACKS (exp) = packs;
>         SET_TYPE_STRUCTURAL_EQUALITY (exp);
>   
> @@ -8818,7 +8818,7 @@ coerce_template_parameter_pack (tree parms,
>         TREE_CONSTANT (argument_pack) = 1;
>       }
>   
> -  SET_ARGUMENT_PACK_ARGS (argument_pack, packed_args);
> +  ARGUMENT_PACK_ARGS (argument_pack) = packed_args;
>     if (CHECKING_P)
>       SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (packed_args,
>   					 TREE_VEC_LENGTH (packed_args));
> @@ -12460,7 +12460,7 @@ extract_fnparm_pack (tree tmpl_parm, tree *spec_p)
>   	}
>   
>         /* Build the argument packs.  */
> -      SET_ARGUMENT_PACK_ARGS (argpack, parmvec);
> +      ARGUMENT_PACK_ARGS (argpack) = parmvec;
>       }
>     *spec_p = spec_parm;
>   
> @@ -13023,7 +13023,7 @@ extract_locals_r (tree *tp, int */*walk_subtrees*/, void *data_)
>   			{
>   			  spec = copy_node (spec);
>   			  args = copy_node (args);
> -			  SET_ARGUMENT_PACK_ARGS (spec, args);
> +			  ARGUMENT_PACK_ARGS (spec) = args;
>   			  register_local_specialization (spec, *tp);
>   			}
>   		      TREE_VEC_ELT (args, i) = carg;
> @@ -13410,7 +13410,7 @@ make_argument_pack (tree vec)
>         pack = make_node (NONTYPE_ARGUMENT_PACK);
>         TREE_CONSTANT (pack) = 1;
>       }
> -  SET_ARGUMENT_PACK_ARGS (pack, vec);
> +  ARGUMENT_PACK_ARGS (pack) = vec;
>     return pack;
>   }
>   
> @@ -13463,7 +13463,7 @@ tsubst_argument_pack (tree orig_arg, tree args, tsubst_flags_t complain,
>   	  TREE_CONSTANT (new_arg) = TREE_CONSTANT (orig_arg);
>   	}
>   
> -      SET_ARGUMENT_PACK_ARGS (new_arg, pack_args);
> +      ARGUMENT_PACK_ARGS (new_arg) = pack_args;
>       }
>   
>     return new_arg;
> @@ -18442,7 +18442,7 @@ lookup_init_capture_pack (tree decl)
>         len = TREE_VEC_LENGTH (fpack);
>         vec = make_tree_vec (len);
>         r = make_node (NONTYPE_ARGUMENT_PACK);
> -      SET_ARGUMENT_PACK_ARGS (r, vec);
> +      ARGUMENT_PACK_ARGS (r) = vec;
>       }
>     for (int i = 0; i < len; ++i)
>       {
> @@ -22911,7 +22911,7 @@ type_unification_real (tree tparms,
>   	      else
>   		arg = cxx_make_type (TYPE_ARGUMENT_PACK);
>   
> -	      SET_ARGUMENT_PACK_ARGS (arg, make_tree_vec (0));
> +	      ARGUMENT_PACK_ARGS (arg) = make_tree_vec (0);
>   
>   	      TREE_VEC_ELT (targs, i) = arg;
>   	      continue;
> @@ -23771,7 +23771,7 @@ unify_pack_expansion (tree tparms, tree targs, tree packed_parms,
>             else
>   	    result = cxx_make_type (TYPE_ARGUMENT_PACK);
>   
> -          SET_ARGUMENT_PACK_ARGS (result, new_args);
> +	  ARGUMENT_PACK_ARGS (result) = new_args;
>   
>             /* Note the deduced argument packs for this parameter
>                pack.  */
> @@ -23785,7 +23785,7 @@ unify_pack_expansion (tree tparms, tree targs, tree packed_parms,
>                now we have a complete set of arguments.  */
>             tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
>   
> -          SET_ARGUMENT_PACK_ARGS (old_pack, new_args);
> +	  ARGUMENT_PACK_ARGS (old_pack) = new_args;
>             ARGUMENT_PACK_INCOMPLETE_P (old_pack) = 1;
>             ARGUMENT_PACK_EXPLICIT_ARGS (old_pack) = explicit_args;
>           }
> @@ -26899,7 +26899,7 @@ tsubst_initializer_list (tree t, tree argvec)
>   		  else
>   		    {
>   		      value = expr;
> -		      SET_PACK_EXPANSION_PATTERN (value, TREE_VALUE (arg));
> +		      PACK_EXPANSION_PATTERN (value) = TREE_VALUE (arg);
>   		    }
>   		  expanded_exprs
>   		    = tsubst_pack_expansion (value, argvec,


  reply	other threads:[~2022-05-10 14:17 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-05-10 13:40 [PATCH 1/2] c++: Harden *_PACK_EXPANSION and *_ARGUMENT_PACK macros Patrick Palka
2022-05-10 13:40 ` [PATCH 2/2] c++: Remove SET_PACK_EXPANSION_PATTERN / SET_ARGUMENT_PACK_ARGS Patrick Palka
2022-05-10 14:17   ` Jason Merrill [this message]
2022-05-10 14:17 ` [PATCH 1/2] c++: Harden *_PACK_EXPANSION and *_ARGUMENT_PACK macros Jason Merrill

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=6b24452a-5e32-31b8-91ed-efcc87aa2ed2@redhat.com \
    --to=jason@redhat.com \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=ppalka@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).