1 static const char help[] = "Tests error message when previous error was not fully handled\n";
2
3 #include <petscsys.h>
4
CreateError(int n)5 PetscErrorCode CreateError(int n)
6 {
7 PetscCheck(n, PETSC_COMM_SELF, PETSC_ERR_USER, "Error Created");
8 PetscCall(CreateError(n - 1));
9 return PETSC_SUCCESS;
10 }
11
main(int argc,char ** argv)12 int main(int argc, char **argv)
13 {
14 PetscErrorCode ierr;
15
16 PetscFunctionBeginUser;
17 PetscCall(PetscInitialize(&argc, &argv, NULL, help));
18 PetscCall(PetscFPrintf(PETSC_COMM_WORLD, stdout, "Demonstrates PETSc Error Handlers\n"));
19 PetscCall(PetscFPrintf(PETSC_COMM_WORLD, stdout, "The error is a contrived error to test error handling\n"));
20 PetscCall(PetscSynchronizedFlush(PETSC_COMM_WORLD, PETSC_STDOUT));
21 ierr = CreateError(5);
22 (void)ierr; /* this prevents the compiler from warning about unused error return code */
23 ierr = CreateError(5);
24 (void)ierr;
25 PetscCall(CreateError(5));
26 PetscCall(PetscFinalize());
27 return 0;
28 }
29
30 /*TEST
31
32 test:
33 requires: !defined(PETSCTEST_VALGRIND) !defined(PETSC_HAVE_SANITIZER)
34 args: -petsc_ci_portable_error_output -error_output_stdout
35 filter: grep -E -v "(memory block|leaked context|not freed before MPI_Finalize|Could be the program crashed|PETSc Option Table entries|source: environment)"
36
37 TEST*/
38