18a570a87SEvgenii Stepanov // RUN: %clang_hwasan -O0 %s -o %t && %run %t 2>&1 28a570a87SEvgenii Stepanov 3*847fa84bSAlexey Baturo // REQUIRES: aarch64-target-arch || x86_64-target-arch || riscv64-target-arch 48a570a87SEvgenii Stepanov // REQUIRES: pointer-tagging 58a570a87SEvgenii Stepanov 68a570a87SEvgenii Stepanov #include <assert.h> 78a570a87SEvgenii Stepanov #include <pthread.h> 88a570a87SEvgenii Stepanov #include <sanitizer/hwasan_interface.h> 98a570a87SEvgenii Stepanov #include <stdio.h> 108a570a87SEvgenii Stepanov #include <stdlib.h> 118a570a87SEvgenii Stepanov #include <sys/types.h> 128a570a87SEvgenii Stepanov #include <sys/wait.h> 138a570a87SEvgenii Stepanov #include <unistd.h> 148a570a87SEvgenii Stepanov 158a570a87SEvgenii Stepanov void *volatile sink; 168a570a87SEvgenii Stepanov main(int argc,char ** argv)178a570a87SEvgenii Stepanovint main(int argc, char **argv) { 188a570a87SEvgenii Stepanov pthread_atfork(nullptr, nullptr, []() { 198a570a87SEvgenii Stepanov alarm(5); 208a570a87SEvgenii Stepanov sink = malloc(10); 218a570a87SEvgenii Stepanov }); 228a570a87SEvgenii Stepanov int pid = fork(); 238a570a87SEvgenii Stepanov if (pid) { 248a570a87SEvgenii Stepanov int wstatus; 258a570a87SEvgenii Stepanov do { 268a570a87SEvgenii Stepanov waitpid(pid, &wstatus, 0); 278a570a87SEvgenii Stepanov } while (!WIFEXITED(wstatus) && !WIFSIGNALED(wstatus)); 288a570a87SEvgenii Stepanov if (!WIFEXITED(wstatus) || WEXITSTATUS(wstatus)) { 298a570a87SEvgenii Stepanov fprintf(stderr, "abnormal exit\n"); 308a570a87SEvgenii Stepanov return 1; 318a570a87SEvgenii Stepanov } 328a570a87SEvgenii Stepanov } 338a570a87SEvgenii Stepanov return 0; 348a570a87SEvgenii Stepanov } 35