On 06/22/2015 09:38 AM, Nick Clifton wrote:
Hi Guys,

   The test file gcc/testsuite/gcc.dg/graphite/isl-ast-gen-if-1.c file
   was generating an unexpected failure for the RX.  When I investigated
   I found that a return address on the stack was being corrupted, and I
   tracked it down to the foo() function:

     foo (int a[], int n)
     {
       int i;
       for (i = 0; i < n; i++)
         {
           if (i < 25)
             a[i] = i;
          a[n - i] = 1;
         }
     }

   The problem is that when i is 0, the line a[n - i] writes to a[50]
   which is beyond the end of the a array.  (In the RX case it writes
   over the return address on the stack).

   The patch below fixes the problem, although it could also be solved by
   increasing the size of the a array when it is declared in main().

   OK to apply ?

Cheers
   Nick

gcc/testsuite/ChangeLog
2015-06-22  Nick Clifton  <ni...@redhat.com>

        * gcc.dg/graphite/isl-ast-gen-if-1.c (foo): Prevent writing after
        the end of the array.
I'd tend to prefer to change the size of the array -- adding another conditional in the loop may have unintended consequences that possibly scramble things just enough to compromise the test.

jeff

Reply via email to