aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2016-12-06 22:47:00 +0000
committerEric Botcazou <ebotcazou@gcc.gnu.org>2016-12-06 22:47:00 +0000
commit78bcf3dc722bce75c02eb05f351daf3447896c9d (patch)
treea0f3522e79b59be083f1a83810c5b0e45025813a /gcc
parenta5a56d88a1040a42a1bfc22587364f3bfb1efa76 (diff)
downloadgcc-78bcf3dc722bce75c02eb05f351daf3447896c9d.zip
gcc-78bcf3dc722bce75c02eb05f351daf3447896c9d.tar.gz
gcc-78bcf3dc722bce75c02eb05f351daf3447896c9d.tar.bz2
re PR middle-end/78700 (gccgo testcases stack.go, recover.go, crypto/tls fails)
PR middle-end/78700 * calls.c (expand_call): Move back call to prepare_call_address. From-SVN: r243322
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/calls.c10
2 files changed, 8 insertions, 7 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 463dc1a..61eeea3 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2016-12-06 Eric Botcazou <ebotcazou@adacore.com>
+
+ PR middle-end/78700
+ * calls.c (expand_call): Move back call to prepare_call_address.
+
2016-12-06 Michael Meissner <meissner@linux.vnet.ibm.com>
PR target/78658
diff --git a/gcc/calls.c b/gcc/calls.c
index 21385ce..7941869 100644
--- a/gcc/calls.c
+++ b/gcc/calls.c
@@ -3427,13 +3427,6 @@ expand_call (tree exp, rtx target, int ignore)
if (STRICT_ALIGNMENT)
store_unaligned_arguments_into_pseudos (args, num_actuals);
- /* Prepare the address of the call. This must be done before any
- register parameters is loaded for find_first_parameter_load to
- work properly in the presence of descriptors. */
- funexp = prepare_call_address (fndecl ? fndecl : fntype, funexp,
- static_chain_value, &call_fusage,
- reg_parm_seen, flags);
-
/* Now store any partially-in-registers parm.
This is the last place a block-move can happen. */
if (reg_parm_seen)
@@ -3544,6 +3537,9 @@ expand_call (tree exp, rtx target, int ignore)
}
after_args = get_last_insn ();
+ funexp = prepare_call_address (fndecl ? fndecl : fntype, funexp,
+ static_chain_value, &call_fusage,
+ reg_parm_seen, flags);
load_register_parameters (args, num_actuals, &call_fusage, flags,
pass == 0, &sibcall_failure);