aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>1999-12-06 20:31:13 +0100
committerDavid S. Miller <davem@gcc.gnu.org>1999-12-06 11:31:13 -0800
commit04572513c7bf1b351b95c2f6ecf78fec8cbe306a (patch)
treec87294c7e154e34926afbab2e9a7919f97fa9cd9 /gcc
parent50352c9c62fd4b48e237d809ecf1a1e25de3fe30 (diff)
downloadgcc-04572513c7bf1b351b95c2f6ecf78fec8cbe306a.zip
gcc-04572513c7bf1b351b95c2f6ecf78fec8cbe306a.tar.gz
gcc-04572513c7bf1b351b95c2f6ecf78fec8cbe306a.tar.bz2
calls.c (save_fixed_argument_area): If save_mode is BLKmode, always use move_by_pieces to avoid infinite recursion.
* calls.c (save_fixed_argument_area): If save_mode is BLKmode, always use move_by_pieces to avoid infinite recursion. (restore_fixed_argument_area): Likewise. From-SVN: r30805
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/calls.c17
2 files changed, 15 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 67a0376..f2c3181 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -13,6 +13,10 @@
* config/sparc/sparc.c (input_operand): Allow HImode and QImode
valid sethi operations when TARGET_ARCH64.
+ * calls.c (save_fixed_argument_area): If save_mode is BLKmode,
+ always use move_by_pieces to avoid infinite recursion.
+ (restore_fixed_argument_area): Likewise.
+
Mon Dec 6 12:24:52 1999 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* fold-const.c (optimize_bit_field_compare): Only use one mode
diff --git a/gcc/calls.c b/gcc/calls.c
index 40b359d..33b425d 100644
--- a/gcc/calls.c
+++ b/gcc/calls.c
@@ -743,9 +743,11 @@ save_fixed_argument_area (reg_parm_stack_space, argblock,
if (save_mode == BLKmode)
{
save_area = assign_stack_temp (BLKmode, num_to_save, 0);
- emit_block_move (validize_mem (save_area), stack_area,
- GEN_INT (num_to_save),
- PARM_BOUNDARY / BITS_PER_UNIT);
+ /* Cannot use emit_block_move here because it can be done by a library
+ call which in turn gets into this place again and deadly infinite
+ recursion happens. */
+ move_by_pieces (validize_mem (save_area), stack_area, num_to_save,
+ PARM_BOUNDARY / BITS_PER_UNIT);
}
else
{
@@ -781,9 +783,12 @@ restore_fixed_argument_area (save_area, argblock, high_to_save, low_to_save)
if (save_mode != BLKmode)
emit_move_insn (stack_area, save_area);
else
- emit_block_move (stack_area, validize_mem (save_area),
- GEN_INT (high_to_save - low_to_save + 1),
- PARM_BOUNDARY / BITS_PER_UNIT);
+ /* Cannot use emit_block_move here because it can be done by a library
+ call which in turn gets into this place again and deadly infinite
+ recursion happens. */
+ move_by_pieces (stack_area, validize_mem (save_area),
+ high_to_save - low_to_save + 1,
+ PARM_BOUNDARY / BITS_PER_UNIT);
}
#endif