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