aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1995-01-28 07:31:17 -0500
committerRichard Kenner <kenner@gcc.gnu.org>1995-01-28 07:31:17 -0500
commit8e6c802b46eeadb19407635dcc53bd8cafdd54ff (patch)
treeab1f83d26f11f5f52810ea28ad33867deb7426ed
parenta9174911766177b372dce512590b254f2d7a0def (diff)
downloadgcc-8e6c802b46eeadb19407635dcc53bd8cafdd54ff.zip
gcc-8e6c802b46eeadb19407635dcc53bd8cafdd54ff.tar.gz
gcc-8e6c802b46eeadb19407635dcc53bd8cafdd54ff.tar.bz2
(expand_call): When emitting queue for each arg, call protect_from_queue...
(expand_call): When emitting queue for each arg, call protect_from_queue; put in initial_value so EXPR_LIST in is_const case won't have QUEUED. From-SVN: r8835
-rw-r--r--gcc/calls.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/gcc/calls.c b/gcc/calls.c
index cfc8644..0a6b029 100644
--- a/gcc/calls.c
+++ b/gcc/calls.c
@@ -1,5 +1,5 @@
/* Convert function calls to rtl insns, for GNU C compiler.
- Copyright (C) 1989, 1992, 1993, 1994 Free Software Foundation, Inc.
+ Copyright (C) 1989, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -1317,18 +1317,21 @@ expand_call (exp, target, ignore)
args[i].initial_value = args[i].value
= expand_expr (args[i].tree_value, NULL_RTX, VOIDmode, 0);
- if (TYPE_MODE (TREE_TYPE (args[i].tree_value)) != args[i].mode)
- args[i].value
- = convert_modes (args[i].mode,
- TYPE_MODE (TREE_TYPE (args[i].tree_value)),
- args[i].value, args[i].unsignedp);
-
preserve_temp_slots (args[i].value);
pop_temp_slots ();
/* ANSI doesn't require a sequence point here,
but PCC has one, so this will avoid some problems. */
emit_queue ();
+
+ args[i].initial_value = args[i].value
+ = protect_from_queue (args[i].initial_value, 0);
+
+ if (TYPE_MODE (TREE_TYPE (args[i].tree_value)) != args[i].mode)
+ args[i].value
+ = convert_modes (args[i].mode,
+ TYPE_MODE (TREE_TYPE (args[i].tree_value)),
+ args[i].value, args[i].unsignedp);
}
/* Now we are about to start emitting insns that can be deleted