OSDN Git Service

* gcc.c-torture/execute/multi-ix.c: Limit CHUNK size between 1 and 500.
authoruros <uros@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 27 Mar 2008 17:49:43 +0000 (17:49 +0000)
committeruros <uros@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 27 Mar 2008 17:49:43 +0000 (17:49 +0000)
        (main): Exit early for CHUNK less than 40 to avoid stack corruption.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@133648 138bc75d-0d04-0410-961f-82ee72b054a4

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

index 1752896..5a52593 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
 2008-03-27  Richard Guenther  <rguenther@suse.de>
 
        PR c/32511
@@ -10,7 +15,7 @@
 
 2008-03-27  Douglas Gregor  <doug.gregor@gmail.com>
 
 
 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>
 
 
 2008-03-27  Zdenek Dvorak  <ook@ucw.cz>
 
@@ -37,7 +42,7 @@
 
 2008-03-26  Richard Guenther  <rguenther@suse.de>
 
 
 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.
        2008-03-26  Richard Guenther  <rguenther@suse.de>
 
        * gcc.dg/fold-addr-1.c: New testcase.
index c9f28b0..377f08c 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
 
    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
 #else
 #define CHUNK 500
 #endif
@@ -146,6 +153,11 @@ f (int n)
 int
 main ()
 {
 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);
 }
   f (1);
   exit (0);
 }