https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120958

--- Comment #1 from Martin Jambor <jamborm at gcc dot gnu.org> ---
And indeed the following hack in Fortran FE "fixes" the benchmark (of
course, this is not meant as a proposed fix, just as a demonstration
where the problem is):

diff --git a/gcc/fortran/trans-types.cc b/gcc/fortran/trans-types.cc
index 1754d982153..7ee65a983a7 100644
--- a/gcc/fortran/trans-types.cc
+++ b/gcc/fortran/trans-types.cc
@@ -3327,6 +3327,7 @@ create_fn_spec (gfc_symbol *sym, tree fntype)
        }
     }

+  bool is_mpi_irecv = (strcmp (sym->name, "mpi_irecv") == 0);
   for (f = gfc_sym_get_dummy_args (sym); f; f = f->next)
     if (spec_len < sizeof (spec))
       {
@@ -3342,6 +3343,7 @@ create_fn_spec (gfc_symbol *sym, tree fntype)
          }

        if (f->sym == NULL || is_pointer || f->sym->attr.target
+           || is_mpi_irecv
            || f->sym->attr.external || f->sym->attr.cray_pointer
            || (f->sym->ts.type == BT_DERIVED
                && (f->sym->ts.u.derived->attr.proc_pointer_comp

Reply via email to