// Checks that the __sanitizer_on_print hook gets the exact same sanitizer // report as what is printed to stderr. // // RUN: %clangxx %s -o %t // RUN: %run %t %t-onprint.txt 2>%t-stderr.txt || true // RUN: diff %t-onprint.txt %t-stderr.txt // // UNSUPPORTED: android #include #include #include #include #include #include #include int f; volatile void *buf; volatile char sink; __attribute__((disable_sanitizer_instrumentation)) extern "C" void __sanitizer_on_print(const char *str) { write(f, str, strlen(str)); } int main(int argc, char *argv[]) { assert(argc >= 2); f = open(argv[1], O_CREAT | O_TRUNC | O_WRONLY, 0666); // Use-after-free to trigger ASan/TSan reports. void *ptr = malloc(1); buf = ptr; free(ptr); sink = *static_cast(ptr); return 0; }