Covers for a generic fortran bug.  The effect is that we'll needlessly
waste 64 bytes of stack space on some calls, but I don't see any
simple and fully correct patch in generic code.  Bootstrapped and
regression tested powerpc64le-linux.  OK mainline and branches?

        PR target/87689
        * config/rs6000/rs6000.c (rs6000_function_parms_need_stack): Cope
        with fortran function decls that lack all args.

diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index 31256a4da8d..288b7606b5e 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -12325,6 +12325,13 @@ rs6000_function_parms_need_stack (tree fun, bool 
incoming)
   if ((!incoming && !prototype_p (fntype)) || stdarg_p (fntype))
     return true;
 
+  /* FIXME: Fortran arg lists can contain hidden parms, fooling
+     prototype_p into saying the function is prototyped when in fact
+     the number and type of args is unknown.  See PR 87689.  */
+  if (!incoming && (strcmp (lang_hooks.name, "GNU F77") == 0
+                   || lang_GNU_Fortran ()))
+    return true;
+
   INIT_CUMULATIVE_INCOMING_ARGS (args_so_far_v, fntype, NULL_RTX);
   args_so_far = pack_cumulative_args (&args_so_far_v);
 

-- 
Alan Modra
Australia Development Lab, IBM

Reply via email to