1673dc3d4SNico Weber // https://github.com/google/sanitizers/issues/925 2673dc3d4SNico Weber // RUN: %clang_asan -O0 %s -o %t && %run %t 2>&1 3673dc3d4SNico Weber 4*cf4aa683SAlexey Baturo // REQUIRES: aarch64-target-arch || x86_64-target-arch || i386-target-arch || arm-target-arch || riscv64-target-arch 5673dc3d4SNico Weber 6673dc3d4SNico Weber #include <assert.h> 7673dc3d4SNico Weber #include <sys/types.h> 8673dc3d4SNico Weber #include <sys/wait.h> 9673dc3d4SNico Weber #include <unistd.h> 10673dc3d4SNico Weber #include <stdio.h> 11673dc3d4SNico Weber #include <sanitizer/asan_interface.h> 12673dc3d4SNico Weber child()13673dc3d4SNico Weber__attribute__((noinline, no_sanitize("address"))) void child() { 14673dc3d4SNico Weber alignas(8) char x[100000]; 15673dc3d4SNico Weber __asan_poison_memory_region(x, sizeof(x)); 16673dc3d4SNico Weber _exit(0); 17673dc3d4SNico Weber } 18673dc3d4SNico Weber parent()19673dc3d4SNico Weber__attribute__((noinline, no_sanitize("address"))) void parent() { 20673dc3d4SNico Weber alignas(8) char x[100000]; 21673dc3d4SNico Weber assert(__asan_address_is_poisoned(x + 5000) == 0); 22673dc3d4SNico Weber } 23673dc3d4SNico Weber main(int argc,char ** argv)24673dc3d4SNico Weberint main(int argc, char **argv) { 25673dc3d4SNico Weber if (vfork()) 26673dc3d4SNico Weber parent(); 27673dc3d4SNico Weber else 28673dc3d4SNico Weber child(); 29673dc3d4SNico Weber 30673dc3d4SNico Weber return 0; 31673dc3d4SNico Weber } 32