xref: /petsc/src/sys/error/tests/ex2.c (revision 793a3527f7f9b48b2117473bf24a35e19d9d5c47)
1 static char help[] = "Tests checking pointers.\n\n";
2 
3 #include <petscsys.h>
4 #include <petsc/private/petscimpl.h>
5 #include <petscvalgrind.h>
6 
7 int main(int argc, char *args[])
8 {
9   PetscErrorCode ierr;
10   PetscInt *ptr;
11 
12   ierr = PetscInitialize(&argc, &args, (char*) 0, help);if (ierr) return ierr;
13   if (ierr) return ierr;
14   if (!PETSC_RUNNING_ON_VALGRIND) {                         /* PetscCheckPointer always returns TRUE when running on Valgrind */
15     ierr = PetscMalloc(1024 * 1024 * 8,&ptr);CHKERRQ(ierr); /* Almost certainly larger than MMAP_THRESHOLD (128 KiB by default) */
16     if (!PetscCheckPointer(ptr,PETSC_INT)) {ierr = PetscPrintf(PETSC_COMM_SELF,"Mistook valid pointer %p for invalid pointer\n",(void*)ptr);CHKERRQ(ierr);}
17     ierr = PetscFree(ptr);CHKERRQ(ierr);
18     if (PetscCheckPointer(ptr,PETSC_INT)) {ierr = PetscPrintf(PETSC_COMM_SELF,"Mistook NULL pointer for valid pointer\n");CHKERRQ(ierr);}
19     ptr = (PetscInt*) ~(PETSC_UINTPTR_T)0xf; /* Pointer will almost certainly be invalid */
20     if (PetscCheckPointer(ptr,PETSC_INT)) {ierr = PetscPrintf(PETSC_COMM_SELF,"Mistook invalid pointer %p for valid\n",(void*)ptr);CHKERRQ(ierr);}
21   }
22   ierr = PetscFinalize();
23   return ierr;
24 }
25 
26 /*TEST
27 
28    test:
29      args: -check_pointer_intensity 1
30      TODO: reports Mistook invalid pointer 0xfffffffffffffff0 for valid or Free'd pointer is still accessible
31 
32 TEST*/
33