diff options
Diffstat (limited to 'gcc/function.c')
-rw-r--r-- | gcc/function.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/gcc/function.c b/gcc/function.c index fe3d9c1..1fa538b 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -2084,6 +2084,9 @@ aggregate_value_p (const_tree exp, const_tree fntype) if (TREE_ADDRESSABLE (type)) return 1; + if (TYPE_EMPTY_P (type)) + return 0; + if (flag_pcc_struct_return && AGGREGATE_TYPE_P (type)) return 1; @@ -2528,6 +2531,9 @@ assign_parm_find_entry_rtl (struct assign_parm_data_all *all, return; } + targetm.calls.warn_parameter_passing_abi (all->args_so_far, + data->passed_type); + entry_parm = targetm.calls.function_incoming_arg (all->args_so_far, data->promoted_mode, data->passed_type, @@ -4140,8 +4146,9 @@ locate_and_pad_parm (machine_mode passed_mode, tree type, int in_regs, part_size_in_regs = (reg_parm_stack_space == 0 ? partial : 0); - sizetree - = type ? size_in_bytes (type) : size_int (GET_MODE_SIZE (passed_mode)); + sizetree = (type + ? arg_size_in_bytes (type) + : size_int (GET_MODE_SIZE (passed_mode))); where_pad = targetm.calls.function_arg_padding (passed_mode, type); boundary = targetm.calls.function_arg_boundary (passed_mode, type); round_boundary = targetm.calls.function_arg_round_boundary (passed_mode, |