]> gcc.gnu.org Git - gcc.git/commitdiff
re PR middle-end/18096 (internal compiler error: in final_scan_insn, at final.c:2429)
authorRoger Sayle <roger@eyesopen.com>
Sat, 30 Oct 2004 19:20:43 +0000 (19:20 +0000)
committerRoger Sayle <sayle@gcc.gnu.org>
Sat, 30 Oct 2004 19:20:43 +0000 (19:20 +0000)
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
gcc/config/rs6000/rs6000.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr18096-1.c [new file with mode: 0644]

index a0781cb574b4173e8316cceb8fc5a47f53b7a8fc..be8f9e012521e521f417f33d1b88e55186dd6a45 100644 (file)
@@ -1,3 +1,10 @@
+2004-10-30  Roger Sayle  <roger@eyesopen.com>
+
+       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  <kazu@cs.umass.edu>
 
        * tree-ssa-dom.c: Fix comment typos.
index da196bf9d0728ff66e7b4584dd2c9e1dca5b822c..9d01da70dc2f201fe6943e69a9a110decbd6ea3b 100644 (file)
@@ -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)
     {
index e804c2fd32b87fe4109150e7a1a5b087f58a3614..95e2a9d49928bd30006135062794e2dd4478a46b 100644 (file)
@@ -1,3 +1,8 @@
+2004-10-30  Roger Sayle  <roger@eyesopen.com>
+
+       PR middle-end/18096
+       * gcc.dg/pr18096-1.c: New test case.
+
 2004-10-30  Roger Sayle  <roger@eyesopen.com>
 
        * 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 (file)
index 0000000..b11f71a
--- /dev/null
@@ -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" } */
+
This page took 0.142611 seconds and 5 git commands to generate.