1*8a570a87SEvgenii Stepanov // RUN: %clang_hwasan -O0 %s -o %t && %run %t 2>&1 2*8a570a87SEvgenii Stepanov 3*8a570a87SEvgenii Stepanov // REQUIRES: aarch64-target-arch || x86_64-target-arch 4*8a570a87SEvgenii Stepanov // REQUIRES: pointer-tagging 5*8a570a87SEvgenii Stepanov 6*8a570a87SEvgenii Stepanov #include <assert.h> 7*8a570a87SEvgenii Stepanov #include <pthread.h> 8*8a570a87SEvgenii Stepanov #include <sanitizer/hwasan_interface.h> 9*8a570a87SEvgenii Stepanov #include <stdio.h> 10*8a570a87SEvgenii Stepanov #include <stdlib.h> 11*8a570a87SEvgenii Stepanov #include <sys/types.h> 12*8a570a87SEvgenii Stepanov #include <sys/wait.h> 13*8a570a87SEvgenii Stepanov #include <unistd.h> 14*8a570a87SEvgenii Stepanov 15*8a570a87SEvgenii Stepanov void *volatile sink; 16*8a570a87SEvgenii Stepanov main(int argc,char ** argv)17*8a570a87SEvgenii Stepanovint main(int argc, char **argv) { 18*8a570a87SEvgenii Stepanov pthread_atfork(nullptr, nullptr, []() { 19*8a570a87SEvgenii Stepanov alarm(5); 20*8a570a87SEvgenii Stepanov sink = malloc(10); 21*8a570a87SEvgenii Stepanov }); 22*8a570a87SEvgenii Stepanov int pid = fork(); 23*8a570a87SEvgenii Stepanov if (pid) { 24*8a570a87SEvgenii Stepanov int wstatus; 25*8a570a87SEvgenii Stepanov do { 26*8a570a87SEvgenii Stepanov waitpid(pid, &wstatus, 0); 27*8a570a87SEvgenii Stepanov } while (!WIFEXITED(wstatus) && !WIFSIGNALED(wstatus)); 28*8a570a87SEvgenii Stepanov if (!WIFEXITED(wstatus) || WEXITSTATUS(wstatus)) { 29*8a570a87SEvgenii Stepanov fprintf(stderr, "abnormal exit\n"); 30*8a570a87SEvgenii Stepanov return 1; 31*8a570a87SEvgenii Stepanov } 32*8a570a87SEvgenii Stepanov } 33*8a570a87SEvgenii Stepanov return 0; 34*8a570a87SEvgenii Stepanov } 35