1 // UNSUPPORTED: ios
2 // RUN: %clangxx_asan -O0 -g %s -o %t.executable
3 
4 // Deliberately don't produce the module map and then check that offline symbolization fails
5 // when we try to look for it.
6 // RUN: %env_asan_opts="symbolize=0,print_module_map=0" not %run %t.executable > %t_no_module_map.log 2>&1
7 // RUN: not %asan_symbolize --module-map %t_no_module_map.log --force-system-symbolizer < %t_no_module_map.log 2>&1 | FileCheck -check-prefix=CHECK-NO-MM %s
8 // CHECK-NO-MM: ERROR:{{.*}} Failed to find module map
9 
10 // Now produce the module map and check we can symbolize.
11 // RUN: %env_asan_opts="symbolize=0,print_module_map=2" not %run %t.executable > %t_with_module_map.log 2>&1
12 // RUN: %asan_symbolize --module-map %t_with_module_map.log --force-system-symbolizer < %t_with_module_map.log 2>&1 | FileCheck -check-prefix=CHECK-MM %s
13 
14 #include <cstdlib>
15 
16 // CHECK-MM: WRITE of size 4
17 
foo(int * a)18 extern "C" void foo(int* a) {
19   // CHECK-MM: #0 0x{{.+}} in foo {{.*}}asan-symbolize-with-module-map.cpp:[[@LINE+1]]
20   *a = 5;
21 }
22 
main()23 int main() {
24   int* a = (int*) malloc(sizeof(int));
25   if (!a)
26     return 0;
27   free(a);
28   // CHECK-MM: #1 0x{{.+}} in main {{.*}}asan-symbolize-with-module-map.cpp:[[@LINE+1]]
29   foo(a);
30   return 0;
31 }
32