// Check that free hook doesn't conflict with Realloc. // RUN: %clangxx_memprof -O2 %s -o %t && %run %t 2>&1 | FileCheck %s #include #include #include static void *glob_ptr; // (Speculative fix if memprof is enabled on Apple platforms) // Required for dyld macOS 12.0+ #if (__APPLE__) __attribute__((weak)) #endif extern "C" void __sanitizer_free_hook(const volatile void *ptr) { if (ptr == glob_ptr) { *(int *)ptr = 0; write(1, "FreeHook\n", sizeof("FreeHook\n")); } } int main() { int *x = (int *)malloc(100); x[0] = 42; glob_ptr = x; int *y = (int *)realloc(x, 200); // Verify that free hook was called and didn't spoil the memory. if (y[0] != 42) { _exit(1); } write(1, "Passed\n", sizeof("Passed\n")); free(y); // CHECK: FreeHook // CHECK: Passed return 0; }