re PR rtl-optimization/66891 (ICE in expand_call, at calls.c:3407)
PR rtl-optimization/66891 * calls.c (expand_call): Wrap precompute_register_parameters with NO_DEFER_POP/OK_DEFER_POP to prevent deferred pops. testsuite/ChangeLog: PR target/66891 * gcc.target/i386/pr66891.c: New test. From-SVN: r225918
This commit is contained in:
parent
92d30ce6d4
commit
5ba53785f7
|
@ -1,3 +1,9 @@
|
|||
2015-07-17 Uros Bizjak <ubizjak@gmail.com>
|
||||
|
||||
PR rtl-optimization/66891
|
||||
* calls.c (expand_call): Wrap precompute_register_parameters with
|
||||
NO_DEFER_POP/OK_DEFER_POP to prevent deferred pops.
|
||||
|
||||
2015-07-16 Nathan Sidwell <nathan@codesourcery.com>
|
||||
|
||||
* config/nvptx/mkoffload.c (process): Constify mapping variables.
|
||||
|
|
|
@ -3144,6 +3144,10 @@ expand_call (tree exp, rtx target, int ignore)
|
|||
|
||||
compute_argument_addresses (args, argblock, num_actuals);
|
||||
|
||||
/* Stack is properly aligned, pops can't safely be deferred during
|
||||
the evaluation of the arguments. */
|
||||
NO_DEFER_POP;
|
||||
|
||||
/* Precompute all register parameters. It isn't safe to compute
|
||||
anything once we have started filling any specific hard regs.
|
||||
TLS symbols sometimes need a call to resolve. Precompute
|
||||
|
@ -3151,6 +3155,8 @@ expand_call (tree exp, rtx target, int ignore)
|
|||
to avoid unaligned stack in the called function. */
|
||||
precompute_register_parameters (num_actuals, args, ®_parm_seen);
|
||||
|
||||
OK_DEFER_POP;
|
||||
|
||||
/* Perform stack alignment before the first push (the last arg). */
|
||||
if (argblock == 0
|
||||
&& adjusted_args_size.constant > reg_parm_stack_space
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2015-07-17 Uros Bizjak <ubizjak@gmail.com>
|
||||
|
||||
PR target/66891
|
||||
* gcc.target/i386/pr66891.c: New test.
|
||||
|
||||
2015-07-16 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
|
||||
|
||||
* gcc.target/arm/no-volatile-in-it.c: Skip if -mcpu is overriden.
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
/* { dg-do compile { target ia32 } } */
|
||||
/* { dg-options "-O2" } */
|
||||
|
||||
__attribute__((__stdcall__)) void fn1();
|
||||
|
||||
int a;
|
||||
|
||||
static void fn2() {
|
||||
for (;;)
|
||||
;
|
||||
}
|
||||
|
||||
void fn3() {
|
||||
fn1(0);
|
||||
fn2(a == 0);
|
||||
}
|
Loading…
Reference in New Issue