s390.c (s390_init_frame_layout): Check positive frame_size.
authorAndreas Krebbel <krebbel1@de.ibm.com>
Thu, 26 Oct 2006 06:58:29 +0000 (06:58 +0000)
committerAndreas Krebbel <krebbel@gcc.gnu.org>
Thu, 26 Oct 2006 06:58:29 +0000 (06:58 +0000)
2006-10-26  Andreas Krebbel  <krebbel1@de.ibm.com>

* config/s390/s390.c (s390_init_frame_layout): Check positive
frame_size.

2006-10-26  Andreas Krebbel  <krebbel1@de.ibm.com>

* gcc.dg/20061026.c: New testcase.

From-SVN: r118062

gcc/ChangeLog
gcc/config/s390/s390.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/20061026.c [new file with mode: 0644]

index f467dce03d45848e55fb417e86bf29dd8249a372..554a22c1ef665ec9facdb7cb684f0626a461defb 100644 (file)
@@ -1,3 +1,8 @@
+2006-10-26  Andreas Krebbel  <krebbel1@de.ibm.com>
+
+       * config/s390/s390.c (s390_init_frame_layout): Check positive
+       frame_size.
+
 2006-10-26  Ben Elliston  <bje@au.ibm.com>
 
        * gimplify.c (get_name): Remove extraneous break.
index 3fd36383cbb18917d1f4f0301042d3fd9766fa31..59baba9f3de5950618f71f7e37f7de4bf4798840 100644 (file)
@@ -6718,8 +6718,8 @@ s390_init_frame_layout (void)
       /* Try to predict whether we'll need the base register.  */
       base_used = cfun->machine->split_branches_pending_p
                  || current_function_uses_const_pool
-                 || (!DISP_IN_RANGE (-frame_size)
-                     && !CONST_OK_FOR_K (-frame_size));
+                 || (!DISP_IN_RANGE (frame_size)
+                     && !CONST_OK_FOR_K (frame_size));
 
       /* Decide which register to use as literal pool base.  In small
         leaf functions, try to use an unused call-clobbered register
index 5f1cbf79c79715c07888566daf746b4de030d94f..ad0ca6f7ec84968b734c397996a351e46f156245 100644 (file)
@@ -1,3 +1,7 @@
+2006-10-26  Andreas Krebbel  <krebbel1@de.ibm.com>
+
+       * gcc.dg/20061026.c: New testcase.
+
 2006-10-26  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
 
        PR libgfortran/29563
diff --git a/gcc/testsuite/gcc.dg/20061026.c b/gcc/testsuite/gcc.dg/20061026.c
new file mode 100644 (file)
index 0000000..fb3de23
--- /dev/null
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options "-O1" } */
+
+/* This testcase failed on s390.  The frame size for function f will be
+   exactly 32768 bytes.  The back end has to recognize that this is to
+   large for a 16bit constant and therefore should reserve the literal
+   pool base pointer.  */
+
+int f () {
+  char a[32608];
+
+  g (a);
+}