Message ID | 20240318185454.1314630-1-ewlu@rivosinc.com |
---|---|
State | New |
Headers | show |
Series | RISC-V: Fix C23 (...) functions returning large aggregates [PR114175] | expand |
On 3/18/24 12:54 PM, Edwin Lu wrote: > We assume that TYPE_NO_NAMED_ARGS_STDARG_P don't have any named arguments and > there is nothing to advance, but that is not the case for (...) functions > returning by hidden reference which have one such artificial argument. > This causes gcc.dg/c23-stdarg-[68].c to fail > > Fix the issue by checking if arg.type is NULL as r14-9503-g218d1749612 > explains > > Tested on linux rv64gcv. > > gcc/ChangeLog: > > PR target/114175 > * config/riscv/riscv.cc (riscv_setup_incoming_varargs): Only skip > riscv_funciton_arg_advance for TYPE_NO_NAMED_ARGS_STDARG_P functions > if arg.type is NULL OK. Thanks for taking care of this. Jeff
On 3/18/2024 8:07 PM, Jeff Law wrote: > > > On 3/18/24 12:54 PM, Edwin Lu wrote: >> We assume that TYPE_NO_NAMED_ARGS_STDARG_P don't have any named >> arguments and >> there is nothing to advance, but that is not the case for (...) >> functions >> returning by hidden reference which have one such artificial argument. >> This causes gcc.dg/c23-stdarg-[68].c to fail >> >> Fix the issue by checking if arg.type is NULL as r14-9503-g218d1749612 >> explains >> >> Tested on linux rv64gcv. >> >> gcc/ChangeLog: >> >> PR target/114175 >> * config/riscv/riscv.cc (riscv_setup_incoming_varargs): Only skip >> riscv_funciton_arg_advance for TYPE_NO_NAMED_ARGS_STDARG_P functions >> if arg.type is NULL > OK. Thanks for taking care of this. > > Jeff > Committed! Edwin
diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc index 680c4a728e9..1f5dc33796b 100644 --- a/gcc/config/riscv/riscv.cc +++ b/gcc/config/riscv/riscv.cc @@ -5378,7 +5378,8 @@ riscv_setup_incoming_varargs (cumulative_args_t cum, argument. Advance a local copy of CUM past the last "real" named argument, to find out how many registers are left over. */ local_cum = *get_cumulative_args (cum); - if (!TYPE_NO_NAMED_ARGS_STDARG_P (TREE_TYPE (current_function_decl))) + if (!TYPE_NO_NAMED_ARGS_STDARG_P (TREE_TYPE (current_function_decl)) + || arg.type != NULL_TREE) riscv_function_arg_advance (pack_cumulative_args (&local_cum), arg); /* Found out how many registers we need to save. */