aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2002-12-18 00:57:43 -0500
committerJason Merrill <jason@gcc.gnu.org>2002-12-18 00:57:43 -0500
commitf32ac70daee2c86644800079493e4f3b17a49830 (patch)
treeace7a9fdeba560f12c24f3ad831008ac12133114 /gcc
parent212f6dd0fe0cb1a00ff7dfe0a16cb11cbbe7e6fa (diff)
downloadgcc-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/ChangeLog8
-rw-r--r--gcc/calls.c19
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);