Le 10/11/2022 à 11:20, Bernhard Reutner-Fischer via Fortran a écrit :
Bootstrapped and regtested cleanly on x86_unknown-linux.
The document bits will be rewritten for rst.
Ok for trunk if the prerequisite target_clones patch is approved?

gcc/fortran/ChangeLog:

        * decl.cc (gfc_match_gcc_attributes): Handle flatten.
        * f95-lang.cc (gfc_attribute_table): Add flatten.
        * gfortran.texi: Document attribute flatten.

gcc/testsuite/ChangeLog:

        * gfortran.dg/attr_flatten-1.f90: New test.
---
  gcc/fortran/decl.cc                          |  8 +++-
  gcc/fortran/f95-lang.cc                      |  2 +
  gcc/fortran/gfortran.texi                    |  8 ++++
  gcc/testsuite/gfortran.dg/attr_flatten-1.f90 | 41 ++++++++++++++++++++
  4 files changed, 57 insertions(+), 2 deletions(-)
  create mode 100644 gcc/testsuite/gfortran.dg/attr_flatten-1.f90

diff --git a/gcc/fortran/decl.cc b/gcc/fortran/decl.cc
index d312d4812b6..3d210c26eb5 100644
--- a/gcc/fortran/decl.cc
+++ b/gcc/fortran/decl.cc
(...)
@@ -11849,7 +11850,9 @@ gfc_match_gcc_attributes (void)
        if (strcmp (name, ext_attr_list[id].name) == 0)
          break;
- if (id == EXT_ATTR_LAST)
+      if (strcmp (name, "flatten") == 0)
+       known_attr0args = true; /* Handled below.  We do not need a bit.  */

I don't see the point to have all the attributes needing a bit except one that doesn't but needs a specific handling. What does it look like without the 1/2 patch and if one bit is also used for flatten, like the other attributes?

+      else if (id == EXT_ATTR_LAST)
        {
          gfc_error ("Unknown attribute in !GCC$ ATTRIBUTES statement at %C");
          return MATCH_ERROR;

diff --git a/gcc/fortran/gfortran.texi b/gcc/fortran/gfortran.texi
index 06e4c8c00a1..be650f28b62 100644
--- a/gcc/fortran/gfortran.texi
+++ b/gcc/fortran/gfortran.texi
@@ -3280,6 +3280,14 @@ contains
  end module mymod
  @end smallexample
+@node flatten
+
+Procedures annotated with the @code{flatten} attribute have their
+callees inlined, if possible.
I'm not a native speaker, but I find this sentence confusing.
The words of the gcc manual you are refering to seem more clear: "every call inside the function is inlined, if possible".

+Please refer to
+@ref{Top,,Common Function Attributes,gcc,Using the GNU Compiler Collection 
(GCC)}
+for details about the respective attribute.
+
  The attributes are specified using the syntax
@code{!GCC$ ATTRIBUTES} @var{attribute-list} @code{::} @var{variable-list}

Reply via email to