https://gcc.gnu.org/g:6e593fcda49b1001e87e94ab709607b4fb2c66cf

commit r15-6936-g6e593fcda49b1001e87e94ab709607b4fb2c66cf
Author: Keith Packard <kei...@keithp.com>
Date:   Wed Jan 15 22:05:46 2025 -0700

    lm32: Skip last named param when computing save varargs regs
    
    The cumulative args value in setup_incoming_varargs points at
    the last named parameter. We need to skip over that (if present) to
    get to the first anonymous argument as we only want to include
    those anonymous args in the saved register block.
    
    gcc/
            * config/lm32/lm32.cc (lm32_setup_incoming_varargs): Skip last
            named parameter when preparing to flush registers with unnamed
            arguments to th stack.

Diff:
---
 gcc/config/lm32/lm32.cc | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/gcc/config/lm32/lm32.cc b/gcc/config/lm32/lm32.cc
index d78efc59da5f..dfec28608a0a 100644
--- a/gcc/config/lm32/lm32.cc
+++ b/gcc/config/lm32/lm32.cc
@@ -679,14 +679,18 @@ lm32_setup_incoming_varargs (cumulative_args_t cum_v,
                             const function_arg_info &arg,
                             int *pretend_size, int no_rtl)
 {
-  CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
+  CUMULATIVE_ARGS next_cum = *get_cumulative_args (cum_v);
   int first_anon_arg;
   tree fntype;
 
   fntype = TREE_TYPE (current_function_decl);
 
+  if (!TYPE_NO_NAMED_ARGS_STDARG_P (TREE_TYPE (current_function_decl))
+      || arg.type != NULL_TREE)
+    lm32_function_arg_advance (pack_cumulative_args (&next_cum), arg);
+
   if (stdarg_p (fntype))
-    first_anon_arg = *cum + LM32_FIRST_ARG_REG;
+    first_anon_arg = next_cum + LM32_FIRST_ARG_REG;
   else
     {
       /* this is the common case, we have been passed details setup
@@ -697,7 +701,7 @@ lm32_setup_incoming_varargs (cumulative_args_t cum_v,
       int size = arg.promoted_size_in_bytes ();
 
       first_anon_arg =
-       *cum + LM32_FIRST_ARG_REG +
+       next_cum + LM32_FIRST_ARG_REG +
        ((size + UNITS_PER_WORD - 1) / UNITS_PER_WORD);
     }

Reply via email to