Parenthesize macro expression - caught by a clang warning on its usage
[charm.git] / tests / ampi / stacksize / test.c
1 /*
2   Verify that we can use at least 400KB of stack
3 space under AMPI.  Programs segfault if they run
4 out of stack space, so it's important to verify that
5 TCHARM is allocating stacks properly.
6
7 The default stack size is 1MB (tcharm.C:tcharm_stacksize);
8 this program should segfault if run with +tcharm_stacksize=300000.
9
10 Orion Sky Lawlor, olawlor@acm.org, 2003/8/25
11 */
12 #include <stdio.h>
13 #include "mpi.h"
14
15 /**
16  This recursive procedure consumes at least useKB 
17  kilobytes of stack space, by allocating one KB
18  and recursing.  The test fails if the routine
19  hits a segfault, at which time you can examine 
20  nKB in a debugger or core image to see how big 
21  the stack actually was.
22 */
23 int testStack(int nKB,int useKB) {
24         int i;
25 #define buf1KB (1024-sizeof(i))
26         char buf[buf1KB];
27         for (i=0;i<buf1KB;i++)
28                 buf[i]=0;
29         if (nKB>=useKB) 
30                 return buf[1];
31         else
32                 return buf[buf1KB/2]+testStack(nKB+1,useKB);
33 }
34
35 int main(int argc,char **argv)
36 {
37         int rank,size;
38         MPI_Init(&argc,&argv);
39         MPI_Comm_rank(MPI_COMM_WORLD, &rank);
40         MPI_Comm_size(MPI_COMM_WORLD, &size);
41
42         testStack(0,400);
43         
44         MPI_Barrier(MPI_COMM_WORLD);
45         if(rank == 0) {
46           printf("stacksize test passed\n");
47         }
48         MPI_Finalize();
49         return 0;
50 }