Alfie Richards <alfie.richa...@arm.com> writes:
> gcc/ChangeLog:
>
>       * attribs.cc (make_attribute): New function overload.
>       * attribs.h (make_attribute): New function overload.
> ---
>  gcc/attribs.cc | 19 ++++++++++++++++++-
>  gcc/attribs.h  |  1 +
>  2 files changed, 19 insertions(+), 1 deletion(-)
>
> diff --git a/gcc/attribs.cc b/gcc/attribs.cc
> index 5cf45491ada..cb25845715d 100644
> --- a/gcc/attribs.cc
> +++ b/gcc/attribs.cc
> @@ -1090,7 +1090,24 @@ make_attribute (const char *name, const char 
> *arg_name, tree chain)
>    return attr;
>  }
>  
> -
> +/* Makes a function attribute of the form NAME (ARG_NAME) and chains
> +   it to CHAIN.  */
> +
> +tree
> +make_attribute (string_slice name, string_slice arg_name, tree chain)
> +{
> +  tree attr_name;
> +  tree attr_arg_name;
> +  tree attr_args;
> +  tree attr;
> +
> +  attr_name = get_identifier_with_length (name.begin (), name.size ());
> +  attr_arg_name = build_string (arg_name.size (), arg_name.begin ());
> +  attr_args = tree_cons (NULL_TREE, attr_arg_name, NULL_TREE);
> +  attr = tree_cons (attr_name, attr_args, chain);
> +  return attr;
> +}
> +

It seems to be more usual in new code to prefer initialisation over
assignment where possible, so:

  tree attr_name = get_identifier_with_length (name.begin (), name.size ());
  tree attr_arg_name = build_string (arg_name.size (), arg_name.begin ());
  tree attr_args = tree_cons (NULL_TREE, attr_arg_name, NULL_TREE);
  tree attr = tree_cons (attr_name, attr_args, chain);
  return attr;

OK for GCC 16 with that change, thanks.

Richard

>  /* Common functions used for target clone support.  */
>  
>  /* Comparator function to be used in qsort routine to sort attribute
> diff --git a/gcc/attribs.h b/gcc/attribs.h
> index 4b946390f76..e7d592c5b41 100644
> --- a/gcc/attribs.h
> +++ b/gcc/attribs.h
> @@ -46,6 +46,7 @@ extern tree get_attribute_name (const_tree);
>  extern tree get_attribute_namespace (const_tree);
>  extern void apply_tm_attr (tree, tree);
>  extern tree make_attribute (const char *, const char *, tree);
> +extern tree make_attribute (string_slice, string_slice, tree);
>  extern bool attribute_ignored_p (tree);
>  extern bool attribute_ignored_p (const attribute_spec *const);
>  extern bool any_nonignored_attribute_p (tree);

Reply via email to