diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_mac.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_mac.cpp --- a/compiler-rt/lib/sanitizer_common/sanitizer_mac.cpp +++ b/compiler-rt/lib/sanitizer_common/sanitizer_mac.cpp @@ -989,7 +989,7 @@ // "wrap_puts" within our own dylib. Dl_info info_puts, info_runtime; RAW_CHECK(dladdr(dlsym(RTLD_DEFAULT, "puts"), &info_puts)); - RAW_CHECK(dladdr((void *)__sanitizer_report_error_summary, &info_runtime)); + RAW_CHECK(dladdr((void *)&VerifyInterceptorsWorking, &info_runtime)); if (internal_strcmp(info_puts.dli_fname, info_runtime.dli_fname) != 0) { Report( "ERROR: Interceptors are not working. This may be because %s is " @@ -1039,7 +1039,7 @@ return; Dl_info info; - RAW_CHECK(dladdr((void *)__sanitizer_report_error_summary, &info)); + RAW_CHECK(dladdr((void *)&StripEnv, &info)); const char *dylib_name = StripModuleName(info.dli_fname); bool lib_is_in_env = internal_strstr(dyld_insert_libraries, dylib_name); if (!lib_is_in_env) diff --git a/compiler-rt/test/asan/TestCases/report_error_summary.cpp b/compiler-rt/test/asan/TestCases/report_error_summary.cpp new file mode 100644 --- /dev/null +++ b/compiler-rt/test/asan/TestCases/report_error_summary.cpp @@ -0,0 +1,17 @@ +// RUN: %clangxx_asan -O0 %s -o %t && not %run %t 2>&1 | FileCheck %s + +#include + +extern "C" void __sanitizer_report_error_summary(const char *summary) { + fprintf(stderr, "test_report_error_summary\n", summary); + // CHECK: test_report_error_summary + fflush(stderr); +} + +char *x; + +int main() { + x = new char[20]; + delete[] x; + return x[0]; +}