1 static char help[] = "Tests checking pointers.\n\n"; 2 3 #include <petscsys.h> 4 #include <petsc/private/petscimpl.h> 5 6 int main(int argc, char *args[]) 7 { 8 PetscInt *ptr; 9 10 PetscFunctionBeginUser; 11 PetscCall(PetscInitialize(&argc, &args, NULL, 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 } 23 24 /*TEST 25 26 test: 27 args: -check_pointer_intensity 1 28 TODO: reports Mistook invalid pointer 0xfffffffffffffff0 for valid or Free'd pointer is still accessible 29 30 TEST*/ 31