151d8f598SEmily Shi // Checks that module map does not print at 0, prints once after aborting with 1,
251d8f598SEmily Shi // and prints once before and after aborting with 2
351d8f598SEmily Shi 
451d8f598SEmily Shi // mac header is "Process module map"
551d8f598SEmily Shi // other posix header is "Process memory map follows"
651d8f598SEmily Shi // windows header is "Dumping process modules" (ignored here)
751d8f598SEmily Shi // we should consider unifying the message cross platform
851d8f598SEmily Shi 
951d8f598SEmily Shi // RUN: %clangxx -DUSING_%tool_name %s -o %t -w
1051d8f598SEmily Shi 
11*56ed64dfSVitaly Buka // RUN: %env_tool_opts="print_module_map=0:halt_on_error=1" not %run %t 2>&1 | FileCheck %s --check-prefixes=CHECK,CHECK-MM0
12*56ed64dfSVitaly Buka // RUN: %env_tool_opts="print_module_map=1:halt_on_error=1" not %run %t 2>&1 | FileCheck %s --check-prefixes=CHECK,CHECK-MM1
13*56ed64dfSVitaly Buka // RUN: %env_tool_opts="print_module_map=2:halt_on_error=1" not %run %t 2>&1 | FileCheck %s --check-prefixes=CHECK,CHECK-MM2
1451d8f598SEmily Shi 
1551d8f598SEmily Shi // tsan support pending rdar://67747473
1651d8f598SEmily Shi // XFAIL: tsan
1751d8f598SEmily Shi 
1851d8f598SEmily Shi // FIXME: Add linux support.
1951d8f598SEmily Shi // XFAIL: msan && linux
2051d8f598SEmily Shi 
2151d8f598SEmily Shi // FIXME: Add lsan support.
2251d8f598SEmily Shi // XFAIL: lsan
2351d8f598SEmily Shi 
2451d8f598SEmily Shi int global;
2551d8f598SEmily Shi 
main()2651d8f598SEmily Shi int main() {
2751d8f598SEmily Shi #if defined(USING_ubsan)
2851d8f598SEmily Shi   int value = 5;
2951d8f598SEmily Shi   int computation = value / 0; // Division by zero.
3051d8f598SEmily Shi #else
3151d8f598SEmily Shi   volatile int *a = new int[100];
3251d8f598SEmily Shi   delete[] a;
3351d8f598SEmily Shi   global = a[0]; // use-after-free: triggers ASan/TSan report.
3451d8f598SEmily Shi #endif
3551d8f598SEmily Shi   return 0;
3651d8f598SEmily Shi }
3751d8f598SEmily Shi 
38*56ed64dfSVitaly Buka // CHECK-NOT: {{Process .*map}}
3951d8f598SEmily Shi // CHECK: SUMMARY:
4051d8f598SEmily Shi // CHECK-MM0-NOT: {{Process .*map}}
41*56ed64dfSVitaly Buka 
42*56ed64dfSVitaly Buka // CHECK-MM1: {{Process (module|memory) map}}
4351d8f598SEmily Shi // CHECK-MM1-NOT: {{Process .*map}}
44*56ed64dfSVitaly Buka 
4551d8f598SEmily Shi // CHECK-MM2: {{Process (module|memory) map}}
46*56ed64dfSVitaly Buka // CHECK-MM2: {{Process (module|memory) map}}
47*56ed64dfSVitaly Buka // CHECK-MM2-NOT: {{Process .*map}}
48