1*d7ec48d7SNico Weber // Test for ignorelist functionality of initialization-order checker.
2*d7ec48d7SNico Weber 
3*d7ec48d7SNico Weber // RUN: %clangxx_asan -O0 %s %p/Helpers/initialization-ignorelist-extra.cpp\
4*d7ec48d7SNico Weber // RUN:   %p/Helpers/initialization-ignorelist-extra2.cpp \
5*d7ec48d7SNico Weber // RUN:   -fsanitize-ignorelist=%p/Helpers/initialization-ignorelist.txt -o %t
6*d7ec48d7SNico Weber // RUN: %env_asan_opts=check_initialization_order=true %run %t 2>&1
7*d7ec48d7SNico Weber // RUN: %clangxx_asan -O1 %s %p/Helpers/initialization-ignorelist-extra.cpp\
8*d7ec48d7SNico Weber // RUN:   %p/Helpers/initialization-ignorelist-extra2.cpp \
9*d7ec48d7SNico Weber // RUN:   -fsanitize-ignorelist=%p/Helpers/initialization-ignorelist.txt -o %t
10*d7ec48d7SNico Weber // RUN: %env_asan_opts=check_initialization_order=true %run %t 2>&1
11*d7ec48d7SNico Weber // RUN: %clangxx_asan -O2 %s %p/Helpers/initialization-ignorelist-extra.cpp\
12*d7ec48d7SNico Weber // RUN:   %p/Helpers/initialization-ignorelist-extra2.cpp \
13*d7ec48d7SNico Weber // RUN:   -fsanitize-ignorelist=%p/Helpers/initialization-ignorelist.txt -o %t
14*d7ec48d7SNico Weber // RUN: %env_asan_opts=check_initialization_order=true %run %t 2>&1
15*d7ec48d7SNico Weber 
16*d7ec48d7SNico Weber // Function is defined in another TU.
17*d7ec48d7SNico Weber int readBadGlobal();
18*d7ec48d7SNico Weber int x = readBadGlobal();  // init-order bug.
19*d7ec48d7SNico Weber 
20*d7ec48d7SNico Weber // Function is defined in another TU.
21*d7ec48d7SNico Weber int accessBadObject();
22*d7ec48d7SNico Weber int y = accessBadObject();  // init-order bug.
23*d7ec48d7SNico Weber 
24*d7ec48d7SNico Weber int readBadSrcGlobal();
25*d7ec48d7SNico Weber int z = readBadSrcGlobal();  // init-order bug.
26*d7ec48d7SNico Weber 
main(int argc,char ** argv)27*d7ec48d7SNico Weber int main(int argc, char **argv) {
28*d7ec48d7SNico Weber   return argc + x + y + z - 1;
29*d7ec48d7SNico Weber }
30