1*673dc3d4SNico Weber // Make sure ASan removes the runtime library from DYLD_INSERT_LIBRARIES before
2*673dc3d4SNico Weber // executing other programs.
3*673dc3d4SNico Weber 
4*673dc3d4SNico Weber // RUN: %clangxx_asan %s -o %t
5*673dc3d4SNico Weber // RUN: %clangxx %p/../Helpers/echo-env.cpp -o %t-echo-env
6*673dc3d4SNico Weber // RUN: %clangxx -DSHARED_LIB %s \
7*673dc3d4SNico Weber // RUN:     -dynamiclib -o %t-darwin-dummy-shared-lib-so.dylib
8*673dc3d4SNico Weber 
9*673dc3d4SNico Weber // Make sure DYLD_INSERT_LIBRARIES doesn't contain the runtime library before
10*673dc3d4SNico Weber // execl().
11*673dc3d4SNico Weber 
12*673dc3d4SNico Weber // RUN: %run %t %t-echo-env >/dev/null 2>&1
13*673dc3d4SNico Weber // RUN: %env DYLD_INSERT_LIBRARIES=%t-darwin-dummy-shared-lib-so.dylib \
14*673dc3d4SNico Weber // RUN:     %run %t %t-echo-env 2>&1 | FileCheck %s || exit 1
15*673dc3d4SNico Weber 
16*673dc3d4SNico Weber // UNSUPPORTED: ios
17*673dc3d4SNico Weber 
18*673dc3d4SNico Weber #if !defined(SHARED_LIB)
19*673dc3d4SNico Weber #include <unistd.h>
main(int argc,char * argv[])20*673dc3d4SNico Weber int main(int argc, char *argv[]) {
21*673dc3d4SNico Weber   execl(argv[1], argv[1], "DYLD_INSERT_LIBRARIES", NULL);
22*673dc3d4SNico Weber   // CHECK:  {{DYLD_INSERT_LIBRARIES = .*darwin-dummy-shared-lib-so.dylib.*}}
23*673dc3d4SNico Weber   return 0;
24*673dc3d4SNico Weber }
25*673dc3d4SNico Weber #else  // SHARED_LIB
foo()26*673dc3d4SNico Weber void foo() {}
27*673dc3d4SNico Weber #endif  // SHARED_LIB
28