diff options
author | Jason Merrill <jason@redhat.com> | 2002-12-18 00:57:43 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2002-12-18 00:57:43 -0500 |
commit | f32ac70daee2c86644800079493e4f3b17a49830 (patch) | |
tree | ace7a9fdeba560f12c24f3ad831008ac12133114 /gcc | |
parent | 212f6dd0fe0cb1a00ff7dfe0a16cb11cbbe7e6fa (diff) | |
download | gcc-f32ac70daee2c86644800079493e4f3b17a49830.zip gcc-f32ac70daee2c86644800079493e4f3b17a49830.tar.gz gcc-f32ac70daee2c86644800079493e4f3b17a49830.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/calls.c | 19 |
2 files changed, 15 insertions, 12 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6014d21..52a4c88 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2002-12-17 Jason Merrill <jason@redhat.com> + + * 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 <kkojima@gcc.gnu.org> * config/sh/linux.h (NO_IMPLICIT_EXTERN_C, CPLUSPLUS_CPP_SPEC): diff --git a/gcc/calls.c b/gcc/calls.c index 09398e8..2be53a8 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); |