2: static char help[] = "Tests the signal handler.\n";
4: #include <petscsys.h>
6: int CreateError(int n)
7: {
8: PetscReal *x = 0;
9: if (!n) {x[0] = 100.; return 0;}
10: CreateError(n-1);
11: return 0;
12: }
14: int main(int argc,char **argv)
15: {
16: PetscInitialize(&argc,&argv,(char*)0,help);
17: PetscFPrintf(PETSC_COMM_WORLD,stdout,"Demonstrates how PETSc can trap error interrupts\n");
18: PetscFPrintf(PETSC_COMM_WORLD,stdout,"The error below is contrived to test the code!\n");
19: PetscSynchronizedFlush(PETSC_COMM_WORLD,PETSC_STDOUT);
20: CreateError(5);
21: PetscFinalize();
22: return 0;
23: }
25: /*TEST
27: test:
28: args: -error_output_stdout
29: filter: egrep "(Caught signal number 11 SEGV|Caught signal number 4 Illegal)" | wc -l
30: TODO: Does not always produce exactly expected output on all systems for all runs
32: TEST*/