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);