gcc/ChangeLog:

        * attribs.cc (make_attribute): New function overload.
        * attribs.h (make_attribute): New function overload.
---
 gcc/attribs.cc | 14 +++++++++++++-
 gcc/attribs.h  |  1 +
 2 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/gcc/attribs.cc b/gcc/attribs.cc
index f6667839c01..b00d9529a8d 100644
--- a/gcc/attribs.cc
+++ b/gcc/attribs.cc
@@ -1090,7 +1090,19 @@ 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 = 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;
+}
+
 /* 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