From f32ac70daee2c86644800079493e4f3b17a49830 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Wed, 18 Dec 2002 00:57:43 -0500 Subject: [PATCH] calls.c (expand_call): Don't try to be clever about expanding the return slot address. * calls.c (expand_call): Don't try to be clever about expanding the return slot address. From-SVN: r60234 --- gcc/ChangeLog | 8 ++++++++ gcc/calls.c | 19 +++++++------------ 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6014d213dce..52a4c886bcc 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2002-12-17 Jason Merrill + + * calls.c (expand_call): Don't try to be clever about expanding + the return slot address. + + * calls.c (expand_call): Handle CALL_EXPR_HAS_RETURN_SLOT_ADDR + with special struct-return ABIs. + 2002-12-18 Kaz kojima * config/sh/linux.h (NO_IMPLICIT_EXTERN_C, CPLUSPLUS_CPP_SPEC): diff --git a/gcc/calls.c b/gcc/calls.c index 09398e87e1c..2be53a85d13 100644 --- a/gcc/calls.c +++ b/gcc/calls.c @@ -2249,18 +2249,13 @@ expand_call (exp, target, ignore) if (CALL_EXPR_HAS_RETURN_SLOT_ADDR (exp)) { - /* The structure value address arg is already in actparms. */ - if (struct_value_rtx == 0) - /* We want to pass it as a normal argument, so leave it. */ - structure_value_addr_parm = 1; - else - { - /* We want to pass it in a special location. */ - tree return_arg = TREE_VALUE (actparms); - actparms = TREE_CHAIN (actparms); - structure_value_addr = expand_expr (return_arg, struct_value_rtx, - VOIDmode, EXPAND_NORMAL); - } + /* The structure value address arg is already in actparms. + Pull it out. It might be nice to just leave it there, but + we need to set structure_value_addr. */ + tree return_arg = TREE_VALUE (actparms); + actparms = TREE_CHAIN (actparms); + structure_value_addr = expand_expr (return_arg, NULL_RTX, + VOIDmode, EXPAND_NORMAL); } else if (target && GET_CODE (target) == MEM) structure_value_addr = XEXP (target, 0); -- 2.30.2