re PR rtl-optimization/66626 (gcc.dg/torture/stackalign/non-local-goto-5.c segfaults w/ -mregparm=3 or -miamcu)
2015-07-14 Vladimir Makarov <vmakarov@redhat.com> PR rtl-optimization/66626 * lra-constraints.c (lra_constraints): Prevent equivalence substitution for static chain pseudo in functions with nonlocal goto. 2015-07-14 Vladimir Makarov <vmakarov@redhat.com> PR rtl-optimization/66626 * gcc.target/i386/pr66626.c: New. From-SVN: r225789
This commit is contained in:
parent
5fd6ec3e4b
commit
6e5ad0f92c
@ -1,3 +1,10 @@
|
||||
2015-07-14 Vladimir Makarov <vmakarov@redhat.com>
|
||||
|
||||
PR rtl-optimization/66626
|
||||
* lra-constraints.c (lra_constraints): Prevent equivalence
|
||||
substitution for static chain pseudo in functions with nonlocal
|
||||
goto.
|
||||
|
||||
2015-07-14 Sandra Loosemore <sandra@codesourcery.com>
|
||||
|
||||
* config/nios2/nios2.c (TEMP_REG_NUM): Move define up in file.
|
||||
|
@ -4306,7 +4306,13 @@ lra_constraints (bool first_p)
|
||||
&& ((CONST_POOL_OK_P (PSEUDO_REGNO_MODE (i), x)
|
||||
&& (targetm.preferred_reload_class
|
||||
(x, lra_get_allocno_class (i)) == NO_REGS))
|
||||
|| contains_symbol_ref_p (x))))
|
||||
|| contains_symbol_ref_p (x)))
|
||||
/* Static chain equivalence may contain eliminable
|
||||
regs and the result of elimination might be wrong
|
||||
after restoring frame pointer for a nonlocal
|
||||
goto. */
|
||||
|| (cfun->static_chain_decl && crtl->has_nonlocal_goto
|
||||
&& REG_EXPR (reg) == cfun->static_chain_decl))
|
||||
ira_reg_equiv[i].defined_p = false;
|
||||
if (contains_reg_p (x, false, true))
|
||||
ira_reg_equiv[i].profitable_p = false;
|
||||
|
@ -1,3 +1,8 @@
|
||||
2015-07-14 Vladimir Makarov <vmakarov@redhat.com>
|
||||
|
||||
PR rtl-optimization/66626
|
||||
* gcc.target/i386/pr66626.c: New.
|
||||
|
||||
2015-07-14 Sandra Loosemore <sandra@codesourcery.com>
|
||||
|
||||
* gcc.target/nios2/nios2-stack-check-1.c: Adjust patterns.
|
||||
|
26
gcc/testsuite/gcc.target/i386/pr66626.c
Normal file
26
gcc/testsuite/gcc.target/i386/pr66626.c
Normal file
@ -0,0 +1,26 @@
|
||||
/* { dg-do run } */
|
||||
/* { dg-options "-O2 -mregparm=3" } */
|
||||
/* { dg-require-effective-target ia32 } */
|
||||
extern void abort (void);
|
||||
|
||||
int s (int i, int j, int k, int l)
|
||||
{
|
||||
__label__ l1;
|
||||
int f (int i, int j, int k, int l)
|
||||
{
|
||||
if (i + j + k + l == 10)
|
||||
goto l1;
|
||||
return 0;
|
||||
}
|
||||
return f (i, j, k, l);
|
||||
l1:;
|
||||
return 1;
|
||||
}
|
||||
|
||||
int main ()
|
||||
{
|
||||
if (s (1, 2, 3, 4) != 1)
|
||||
abort ();
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user