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,
next prev parent 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).