hi,
        i had a query regarding testcase gcc.c-torture/execute/960521-1.c [Link
below]. The testcase does the following:
          i) mallocs two integer arrays a and b of size n each
         ii) *b=0 and increment b 
                {lets call the new b as bnew, and the old b as bold, so 
                 that bnew = bold+1,and bold[0]=bnew[-1]=0 }
        iii) sets a[0] to a[n-1] to -1
         iv) sets bnew[0] to bnew[BLOCK_SIZE-2] to -1
             => bold [1] to bold [BLOCK_SIZE-1] to -1
          v) results in PASS if bnew [-1] {i.e. bold[0]} is still zero
             FAILs otherwise

        Now this test fails for a particular architecture, because on of the
mallocs returned zero (the amount of stack and heap available being 65K
and 20K respectively). This is because the testcase decides the size to
be malloc'ed based on the stack available. Since the heap space
available to me is much smaller than the stack, this calculation ( size
of each array = (STACK_SIZE / (sizeof (*a) + sizeof (*b)))) results in
an impossibly large malloc request, and the array value setting
overwrites the text. 

        Before making any changes to the testcase to adapt it to our
requirements, i wanted to be sure about the reason for the test, i.e.
what exactly is the testcase supposed to check for? This is a very old
testcase and a look at viewcvs shows it as an initial import from egcs
testsuite base. 

thanks in advance for any help 

regards
saurabh

Link:
~~~~ 
http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/gcc/gcc/gcc/testsuite/gcc.c-torture/execute/960521-1.c?rev=1.2&content-type=text/plain

Reply via email to