From 61168ff146d478146e397e1f1d0666b6b1d80d75 Mon Sep 17 00:00:00 2001 From: Roger Sayle Date: Sat, 30 Oct 2004 19:20:43 +0000 Subject: [PATCH] re PR middle-end/18096 (internal compiler error: in final_scan_insn, at final.c:2429) PR middle-end/18096 * config/rs6000/rs6000.c (rs6000_emit_allocate_stack): Check that the stack adjustment, "size", is valid for Pmode. If the stack frame is too large, generate a trap insn and issue a warning. * gcc.dg/pr18096-1.c: New test case. From-SVN: r89896 --- gcc/ChangeLog | 7 +++++++ gcc/config/rs6000/rs6000.c | 9 ++++++++- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/pr18096-1.c | 12 ++++++++++++ 4 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/pr18096-1.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a0781cb574b..be8f9e01252 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2004-10-30 Roger Sayle + + PR middle-end/18096 + * config/rs6000/rs6000.c (rs6000_emit_allocate_stack): Check that + the stack adjustment, "size", is valid for Pmode. If the stack + frame is too large, generate a trap insn and issue a warning. + 2004-10-30 Kazu Hirata * tree-ssa-dom.c: Fix comment typos. diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index da196bf9d07..9d01da70dc2 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -13111,7 +13111,14 @@ rs6000_emit_allocate_stack (HOST_WIDE_INT size, int copy_r12) rtx insn; rtx stack_reg = gen_rtx_REG (Pmode, STACK_POINTER_REGNUM); rtx tmp_reg = gen_rtx_REG (Pmode, 0); - rtx todec = GEN_INT (-size); + rtx todec = gen_int_mode (-size, Pmode); + + if (INTVAL (todec) != -size) + { + warning("stack frame too large"); + emit_insn (gen_trap ()); + return; + } if (current_function_limit_stack) { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e804c2fd32b..95e2a9d4992 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2004-10-30 Roger Sayle + + PR middle-end/18096 + * gcc.dg/pr18096-1.c: New test case. + 2004-10-30 Roger Sayle * gcc.dg/pr17581-1.c: Add missing prototype for abort. diff --git a/gcc/testsuite/gcc.dg/pr18096-1.c b/gcc/testsuite/gcc.dg/pr18096-1.c new file mode 100644 index 00000000000..b11f71ae984 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr18096-1.c @@ -0,0 +1,12 @@ +/* PR middle-end/18096 */ +/* { dg-do compile { target powerpc-*-* } } */ +/* { dg-options "-O2" } */ + +void f(char*); + +void mkcatdefs(char *fname) +{ + char line [2147483647]; + f(line); +} /* { dg-warning "stack frame too large" "stack frame too large" } */ + -- 2.30.2