summaryrefslogtreecommitdiff
path: root/gcc/integrate.c
diff options
context:
space:
mode:
authormerrill <merrill@138bc75d-0d04-0410-961f-82ee72b054a4>1994-07-31 21:31:00 +0000
committermerrill <merrill@138bc75d-0d04-0410-961f-82ee72b054a4>1994-07-31 21:31:00 +0000
commitd661d9ee70b1b2bb309211ce34760bde3e1129d5 (patch)
tree7b091d2e5d9555e8fc38c714b8cfc18d4584e47e /gcc/integrate.c
parenta01f8de18e9a39b07e8dd01c492b0bd976075a5b (diff)
downloadgcc-d661d9ee70b1b2bb309211ce34760bde3e1129d5.tar.gz
(expand_inline_function): Don't fall down trying to
pass things by invisible reference. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@7842 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/integrate.c')
-rw-r--r--gcc/integrate.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/gcc/integrate.c b/gcc/integrate.c
index 63b150d0e23..26d766314a9 100644
--- a/gcc/integrate.c
+++ b/gcc/integrate.c
@@ -1235,6 +1235,7 @@ expand_inline_function (fndecl, parms, target, ignore, type, structure_value_add
tree arg = convert (TREE_TYPE (formal), TREE_VALUE (actual));
/* Mode of the variable used within the function. */
enum machine_mode mode = TYPE_MODE (TREE_TYPE (formal));
+ int invisiref = 0;
/* Make sure this formal has some correspondence in the users code
* before emitting any line notes for it. */
@@ -1263,6 +1264,7 @@ expand_inline_function (fndecl, parms, target, ignore, type, structure_value_add
store_expr (arg, stack_slot, 0);
arg_vals[i] = XEXP (stack_slot, 0);
+ invisiref = 1;
}
else if (GET_CODE (loc) != MEM)
{
@@ -1288,8 +1290,11 @@ expand_inline_function (fndecl, parms, target, ignore, type, structure_value_add
be two different pseudos, and `safe_from_p' will make all
sorts of smart assumptions about their not conflicting.
But if ARG_VALS[I] overlaps TARGET, these assumptions are
- wrong, so put ARG_VALS[I] into a fresh register. */
+ wrong, so put ARG_VALS[I] into a fresh register.
+ Don't worry about invisible references, since their stack
+ temps will never overlap the target. */
|| (target != 0
+ && ! invisiref
&& (GET_CODE (arg_vals[i]) == REG
|| GET_CODE (arg_vals[i]) == SUBREG
|| GET_CODE (arg_vals[i]) == MEM)