1673dc3d4SNico Weber // RUN: %clangxx_asan -O0 %s -o %t && not %run %t 2>&1 | FileCheck %s 2673dc3d4SNico Weber // RUN: %clangxx_asan -O3 %s -o %t && not %run %t 2>&1 | FileCheck %s 3673dc3d4SNico Weber 4*be8b3f0cSOliver Stannard // UNSUPPORTED: darwin, aarch64 5673dc3d4SNico Weber 6673dc3d4SNico Weber #include <assert.h> 7673dc3d4SNico Weber #include <sys/wait.h> 8673dc3d4SNico Weber #include <unistd.h> 9673dc3d4SNico Weber #include <signal.h> 10673dc3d4SNico Weber main(int argc,char ** argv)11673dc3d4SNico Weberint main(int argc, char **argv) { 12673dc3d4SNico Weber pid_t pid = fork(); 13673dc3d4SNico Weber if (pid) { // parent 14673dc3d4SNico Weber int x[3]; 15673dc3d4SNico Weber int *status = x + argc * 3; 16673dc3d4SNico Weber int res; 17673dc3d4SNico Weber 18673dc3d4SNico Weber siginfo_t *si = (siginfo_t*)(x + argc * 3); 19673dc3d4SNico Weber res = waitid(P_ALL, 0, si, WEXITED | WNOHANG); 20673dc3d4SNico Weber // CHECK: stack-buffer-overflow 21673dc3d4SNico Weber // CHECK: {{WRITE of size .* at 0x.* thread T0}} 22673dc3d4SNico Weber // CHECK: {{in .*waitid}} 23673dc3d4SNico Weber // CHECK: {{in main .*waitid.cpp:}} 24673dc3d4SNico Weber // CHECK: is located in stack of thread T0 at offset 25673dc3d4SNico Weber // CHECK: {{in main}} 26673dc3d4SNico Weber return res != -1; 27673dc3d4SNico Weber } 28673dc3d4SNico Weber // child 29673dc3d4SNico Weber return 0; 30673dc3d4SNico Weber } 31