multi-ix.c: Limit CHUNK size between 1 and 500.
authorUros Bizjak <uros@gcc.gnu.org>
Thu, 27 Mar 2008 17:49:43 +0000 (18:49 +0100)
committerUros Bizjak <uros@gcc.gnu.org>
Thu, 27 Mar 2008 17:49:43 +0000 (18:49 +0100)
        * gcc.c-torture/execute/multi-ix.c: Limit CHUNK size between 1 and 500.
        (main): Exit early for CHUNK less than 40 to avoid stack corruption.

From-SVN: r133648

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/execute/multi-ix.c

index 175289686e6c130960c60b0aff8e15147479dd3a..5a52593621f504cef3c3e92dbe21eaccd82301d5 100644 (file)
@@ -1,3 +1,8 @@
+2008-03-26  Uros Bizjak  <ubizjak@gmail.com>
+
+       * gcc.c-torture/execute/multi-ix.c: Limit CHUNK size between 1 and 500.
+       (main): Exit early for CHUNK less than 40 to avoid stack corruption.
+
 2008-03-27  Richard Guenther  <rguenther@suse.de>
 
        PR c/32511
@@ -10,7 +15,7 @@
 
 2008-03-27  Douglas Gregor  <doug.gregor@gmail.com>
 
-       * g++.dg/cpp0x/variadic91.C: New.
+       * g++.dg/cpp0x/variadic91.C: New.
 
 2008-03-27  Zdenek Dvorak  <ook@ucw.cz>
 
@@ -37,7 +42,7 @@
 
 2008-03-26  Richard Guenther  <rguenther@suse.de>
 
-       Revert
+       Revert:
        2008-03-26  Richard Guenther  <rguenther@suse.de>
 
        * gcc.dg/fold-addr-1.c: New testcase.
index c9f28b0ac8deccdc0e444e631fe136c97567d41e..377f08c115cb918db47988ee9687e5196e8261bb 100644 (file)
 
    Subtract the last two off STACK_SIZE and figure out what the maximum
    chunk size can be.  We make the last bit conservative to account for
-   register saves and other processor-dependent saving.  */
-#define CHUNK ((STACK_SIZE-40*sizeof(int)-256*sizeof(void *))/40/sizeof(int))
+   register saves and other processor-dependent saving.  Limit the
+   chunk size to some sane values.  */
+
+#define MIN(X,Y) ((X) < (Y) ? (X) : (Y))
+#define MAX(X,Y) ((X) > (Y) ? (X) : (Y))
+
+#define CHUNK                                                          \
+  MIN (500, (MAX (1, (signed)(STACK_SIZE-40*sizeof(int)-256*sizeof(void *)) \
+                     / (signed)(40*sizeof(int)))))
 #else
 #define CHUNK 500
 #endif
@@ -146,6 +153,11 @@ f (int n)
 int
 main ()
 {
+  /* CHUNK needs to be at least 40 to avoid stack corruption,
+     since index variable i0 in "a[i0] = i0" equals 39.  */
+  if (CHUNK < 40)
+    exit (0);
+
   f (1);
   exit (0);
 }