diff mbox series

[v8,03/12] Add a musttail generic attribute to the c-attribs table

Message ID 20240622185557.1589179-4-ak@linux.intel.com
State New
Headers show
Series [v8,01/12] Improve must tail in RTL backend | expand

Commit Message

Andi Kleen June 22, 2024, 6:54 p.m. UTC
It does nothing currently since statement attributes are handled
directly in the parser.

gcc/c-family/ChangeLog:

	* c-attribs.cc (handle_musttail_attribute): Add.
	* c-common.h (handle_musttail_attribute): Add.
---
 gcc/c-family/c-attribs.cc | 15 +++++++++++++++
 gcc/c-family/c-common.h   |  1 +
 2 files changed, 16 insertions(+)

Comments

Richard Biener July 5, 2024, 10:44 a.m. UTC | #1
On Sat, Jun 22, 2024 at 8:57 PM Andi Kleen <ak@linux.intel.com> wrote:
>
> It does nothing currently since statement attributes are handled
> directly in the parser.

Is this needed at all?  a "'musttail' attribute ignored" diagnostic isn't
much more helpful than "'foo' attribute directive ignored"?  Or does
stmt attribute parsing rely on this table as well?

Richard.

> gcc/c-family/ChangeLog:
>
>         * c-attribs.cc (handle_musttail_attribute): Add.
>         * c-common.h (handle_musttail_attribute): Add.
> ---
>  gcc/c-family/c-attribs.cc | 15 +++++++++++++++
>  gcc/c-family/c-common.h   |  1 +
>  2 files changed, 16 insertions(+)
>
> diff --git a/gcc/c-family/c-attribs.cc b/gcc/c-family/c-attribs.cc
> index f9b229aba7fc..5adc7b775eaf 100644
> --- a/gcc/c-family/c-attribs.cc
> +++ b/gcc/c-family/c-attribs.cc
> @@ -340,6 +340,8 @@ const struct attribute_spec c_common_gnu_attributes[] =
>    { "common",                 0, 0, true,  false, false, false,
>                               handle_common_attribute,
>                               attr_common_exclusions },
> +  { "musttail",                      0, 0, false, false, false,
> +                             false, handle_musttail_attribute, NULL },
>    /* FIXME: logically, noreturn attributes should be listed as
>       "false, true, true" and apply to function types.  But implementing this
>       would require all the places in the compiler that use TREE_THIS_VOLATILE
> @@ -1222,6 +1224,19 @@ handle_common_attribute (tree *node, tree name, tree ARG_UNUSED (args),
>    return NULL_TREE;
>  }
>
> +/* Handle a "musttail" attribute; arguments as in
> +   struct attribute_spec.handler.  */
> +
> +tree
> +handle_musttail_attribute (tree ARG_UNUSED (*node), tree name, tree ARG_UNUSED (args),
> +                          int ARG_UNUSED (flags), bool *no_add_attrs)
> +{
> +  /* Currently only a statement attribute, handled directly in parser.  */
> +  warning (OPT_Wattributes, "%qE attribute ignored", name);
> +  *no_add_attrs = true;
> +  return NULL_TREE;
> +}
> +
>  /* Handle a "noreturn" attribute; arguments as in
>     struct attribute_spec.handler.  */
>
> diff --git a/gcc/c-family/c-common.h b/gcc/c-family/c-common.h
> index 48c89b603bcd..e84c9c47513b 100644
> --- a/gcc/c-family/c-common.h
> +++ b/gcc/c-family/c-common.h
> @@ -1643,6 +1643,7 @@ extern tree find_tm_attribute (tree);
>  extern const struct attribute_spec::exclusions attr_cold_hot_exclusions[];
>  extern const struct attribute_spec::exclusions attr_noreturn_exclusions[];
>  extern tree handle_noreturn_attribute (tree *, tree, tree, int, bool *);
> +extern tree handle_musttail_attribute (tree *, tree, tree, int, bool *);
>  extern bool has_attribute (location_t, tree, tree, tree (*)(tree));
>  extern tree build_attr_access_from_parms (tree, bool);
>
> --
> 2.45.2
>
Andi Kleen July 6, 2024, 4:10 p.m. UTC | #2
On Fri, Jul 05, 2024 at 12:44:47PM +0200, Richard Biener wrote:
> On Sat, Jun 22, 2024 at 8:57 PM Andi Kleen <ak@linux.intel.com> wrote:
> >
> > It does nothing currently since statement attributes are handled
> > directly in the parser.
> 
> Is this needed at all?  a "'musttail' attribute ignored" diagnostic isn't
> much more helpful than "'foo' attribute directive ignored"?  Or does
> stmt attribute parsing rely on this table as well?

It avoids an extra check in the C/C++ parser. I will clarify the commit
message to say that.

-Andi
diff mbox series

Patch

diff --git a/gcc/c-family/c-attribs.cc b/gcc/c-family/c-attribs.cc
index f9b229aba7fc..5adc7b775eaf 100644
--- a/gcc/c-family/c-attribs.cc
+++ b/gcc/c-family/c-attribs.cc
@@ -340,6 +340,8 @@  const struct attribute_spec c_common_gnu_attributes[] =
   { "common",                 0, 0, true,  false, false, false,
 			      handle_common_attribute,
 	                      attr_common_exclusions },
+  { "musttail",		      0, 0, false, false, false,
+			      false, handle_musttail_attribute, NULL },
   /* FIXME: logically, noreturn attributes should be listed as
      "false, true, true" and apply to function types.  But implementing this
      would require all the places in the compiler that use TREE_THIS_VOLATILE
@@ -1222,6 +1224,19 @@  handle_common_attribute (tree *node, tree name, tree ARG_UNUSED (args),
   return NULL_TREE;
 }
 
+/* Handle a "musttail" attribute; arguments as in
+   struct attribute_spec.handler.  */
+
+tree
+handle_musttail_attribute (tree ARG_UNUSED (*node), tree name, tree ARG_UNUSED (args),
+			   int ARG_UNUSED (flags), bool *no_add_attrs)
+{
+  /* Currently only a statement attribute, handled directly in parser.  */
+  warning (OPT_Wattributes, "%qE attribute ignored", name);
+  *no_add_attrs = true;
+  return NULL_TREE;
+}
+
 /* Handle a "noreturn" attribute; arguments as in
    struct attribute_spec.handler.  */
 
diff --git a/gcc/c-family/c-common.h b/gcc/c-family/c-common.h
index 48c89b603bcd..e84c9c47513b 100644
--- a/gcc/c-family/c-common.h
+++ b/gcc/c-family/c-common.h
@@ -1643,6 +1643,7 @@  extern tree find_tm_attribute (tree);
 extern const struct attribute_spec::exclusions attr_cold_hot_exclusions[];
 extern const struct attribute_spec::exclusions attr_noreturn_exclusions[];
 extern tree handle_noreturn_attribute (tree *, tree, tree, int, bool *);
+extern tree handle_musttail_attribute (tree *, tree, tree, int, bool *);
 extern bool has_attribute (location_t, tree, tree, tree (*)(tree));
 extern tree build_attr_access_from_parms (tree, bool);