summaryrefslogtreecommitdiff
path: root/gcc/calls.c
diff options
context:
space:
mode:
authorwilson <wilson@138bc75d-0d04-0410-961f-82ee72b054a4>1994-04-06 22:50:58 +0000
committerwilson <wilson@138bc75d-0d04-0410-961f-82ee72b054a4>1994-04-06 22:50:58 +0000
commitf5560089c259afc7bcf1c138a33ce632d6190c2d (patch)
treedfd229e9c2e3ad04c4dc3d94458a1c254fc78fc1 /gcc/calls.c
parent945babb158ea7ff2c11d8a8e49502d501fe6a6cf (diff)
downloadgcc-f5560089c259afc7bcf1c138a33ce632d6190c2d.tar.gz
(emit_library_call_value): New variable is_const. Clear
it for functions that return an aggregate in memory. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@6991 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/calls.c')
-rw-r--r--gcc/calls.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/gcc/calls.c b/gcc/calls.c
index 1ac4fee5f1b..a5246b177cc 100644
--- a/gcc/calls.c
+++ b/gcc/calls.c
@@ -2411,6 +2411,7 @@ emit_library_call_value VPROTO((rtx orgfun, rtx value, int no_queue,
int struct_value_size = 0;
/* library calls are never indirect calls. */
int current_call_is_indirect = 0;
+ int is_const;
VA_START (p, nargs);
@@ -2422,12 +2423,16 @@ emit_library_call_value VPROTO((rtx orgfun, rtx value, int no_queue,
nargs = va_arg (p, int);
#endif
+ is_const = no_queue;
fun = orgfun;
/* If this kind of value comes back in memory,
decide where in memory it should come back. */
if (aggregate_value_p (type_for_mode (outmode, 0)))
{
+ /* This call returns a big structure. */
+ is_const = 0;
+
#ifdef PCC_STATIC_STRUCT_RETURN
rtx pointer_reg
= hard_function_value (build_pointer_type (type_for_mode (outmode, 0)),
@@ -2729,7 +2734,7 @@ emit_library_call_value VPROTO((rtx orgfun, rtx value, int no_queue,
FUNCTION_ARG (args_so_far, VOIDmode, void_type_node, 1),
(outmode != VOIDmode && mem_value == 0
? hard_libcall_value (outmode) : NULL_RTX),
- old_inhibit_defer_pop + 1, use_insns, no_queue);
+ old_inhibit_defer_pop + 1, use_insns, is_const);
/* Now restore inhibit_defer_pop to its actual original value. */
OK_DEFER_POP;