diff --git a/compiler-rt/test/asan/TestCases/Posix/free_hook_realloc.cpp b/compiler-rt/test/asan/TestCases/Posix/free_hook_realloc.cpp --- a/compiler-rt/test/asan/TestCases/Posix/free_hook_realloc.cpp +++ b/compiler-rt/test/asan/TestCases/Posix/free_hook_realloc.cpp @@ -8,14 +8,17 @@ static void *glob_ptr; -extern "C" { -void __sanitizer_free_hook(const volatile void *ptr) { +// 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); diff --git a/compiler-rt/test/memprof/TestCases/free_hook_realloc.cpp b/compiler-rt/test/memprof/TestCases/free_hook_realloc.cpp --- a/compiler-rt/test/memprof/TestCases/free_hook_realloc.cpp +++ b/compiler-rt/test/memprof/TestCases/free_hook_realloc.cpp @@ -7,14 +7,18 @@ static void *glob_ptr; -extern "C" { -void __sanitizer_free_hook(const volatile void *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);