re PR ada/70017 (c52103x and c52104x test failure on s390x)
PR ada/70017 * ira.c (do_reload): Issue warning for generic stack checking here... * reload1.c (reload): ...instead of here and streamline it. From-SVN: r233862
This commit is contained in:
parent
686e2237f3
commit
355a43a19f
@ -1,3 +1,9 @@
|
||||
2016-03-01 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
PR ada/70017
|
||||
* ira.c (do_reload): Issue warning for generic stack checking here...
|
||||
* reload1.c (reload): ...instead of here and streamline it.
|
||||
|
||||
2016-03-01 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* config.gcc (cr16-*-elf): Add newlib-stdint.h to tm_file.
|
||||
|
17
gcc/ira.c
17
gcc/ira.c
@ -5404,9 +5404,8 @@ do_reload (void)
|
||||
{
|
||||
df_set_flags (DF_NO_INSN_RESCAN);
|
||||
build_insn_chain ();
|
||||
|
||||
need_dce = reload (get_insns (), ira_conflicts_p);
|
||||
|
||||
need_dce = reload (get_insns (), ira_conflicts_p);
|
||||
}
|
||||
|
||||
timevar_pop (TV_RELOAD);
|
||||
@ -5484,6 +5483,20 @@ do_reload (void)
|
||||
inform (DECL_SOURCE_LOCATION (decl), "for %qD", decl);
|
||||
}
|
||||
|
||||
/* If we are doing generic stack checking, give a warning if this
|
||||
function's frame size is larger than we expect. */
|
||||
if (flag_stack_check == GENERIC_STACK_CHECK)
|
||||
{
|
||||
HOST_WIDE_INT size = get_frame_size () + STACK_CHECK_FIXED_FRAME_SIZE;
|
||||
|
||||
for (int i = 0; i < FIRST_PSEUDO_REGISTER; i++)
|
||||
if (df_regs_ever_live_p (i) && !fixed_regs[i] && call_used_regs[i])
|
||||
size += UNITS_PER_WORD;
|
||||
|
||||
if (size > STACK_CHECK_MAX_FRAME_SIZE)
|
||||
warning (0, "frame size too large for reliable stack checking");
|
||||
}
|
||||
|
||||
if (pic_offset_table_regno != INVALID_REGNUM)
|
||||
pic_offset_table_rtx = gen_rtx_REG (Pmode, pic_offset_table_regno);
|
||||
|
||||
|
@ -1258,28 +1258,6 @@ reload (rtx_insn *first, int global)
|
||||
}
|
||||
}
|
||||
|
||||
/* If we are doing generic stack checking, give a warning if this
|
||||
function's frame size is larger than we expect. */
|
||||
if (flag_stack_check == GENERIC_STACK_CHECK)
|
||||
{
|
||||
HOST_WIDE_INT size = get_frame_size () + STACK_CHECK_FIXED_FRAME_SIZE;
|
||||
static int verbose_warned = 0;
|
||||
|
||||
for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
|
||||
if (df_regs_ever_live_p (i) && ! fixed_regs[i] && call_used_regs[i])
|
||||
size += UNITS_PER_WORD;
|
||||
|
||||
if (size > STACK_CHECK_MAX_FRAME_SIZE)
|
||||
{
|
||||
warning (0, "frame size too large for reliable stack checking");
|
||||
if (! verbose_warned)
|
||||
{
|
||||
warning (0, "try reducing the number of local variables");
|
||||
verbose_warned = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
free (temp_pseudo_reg_arr);
|
||||
|
||||
/* Indicate that we no longer have known memory locations or constants. */
|
||||
|
@ -1,3 +1,7 @@
|
||||
2016-02-29 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
* gcc.dg/pr70017.c: New test.
|
||||
|
||||
2016-03-01 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c/69796
|
||||
|
16
gcc/testsuite/gcc.dg/pr70017.c
Normal file
16
gcc/testsuite/gcc.dg/pr70017.c
Normal file
@ -0,0 +1,16 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-fstack-check=generic" } */
|
||||
|
||||
/* Check that the expected warning is issued for large frames. */
|
||||
|
||||
#define ONE(s) char a##s[32];
|
||||
#define TEN(s) ONE(s##0) ONE(s##1) ONE(s##2) ONE(s##3) ONE(s##4) \
|
||||
ONE(s##5) ONE(s##6) ONE(s##7) ONE(s##8) ONE(s##9)
|
||||
#define HUNDRED(s) TEN(s##0) TEN(s##1) TEN(s##2) TEN(s##3) TEN(s##4) \
|
||||
TEN(s##5) TEN(s##6) TEN(s##7) TEN(s##8) TEN(s##9)
|
||||
|
||||
void foo(void)
|
||||
{
|
||||
HUNDRED(a)
|
||||
HUNDRED(b)
|
||||
} /* { dg-warning "frame size too large for reliable stack checking" } */
|
Loading…
Reference in New Issue
Block a user