1*673dc3d4SNico Weber // Tests heap_profile=1.
2*673dc3d4SNico Weber // Printing memory profiling only works in the configuration where we can
3*673dc3d4SNico Weber // detect leaks.
4*673dc3d4SNico Weber // REQUIRES: leak-detection
5*673dc3d4SNico Weber //
6*673dc3d4SNico Weber // RUN: %clangxx_asan %s -o %t
7*673dc3d4SNico Weber // RUN: %env_asan_opts=heap_profile=1 %run %t 2>&1 | FileCheck %s
8*673dc3d4SNico Weber #include <sanitizer/common_interface_defs.h>
9*673dc3d4SNico Weber 
10*673dc3d4SNico Weber #include <stdio.h>
11*673dc3d4SNico Weber #include <string.h>
12*673dc3d4SNico Weber #include <unistd.h>
13*673dc3d4SNico Weber 
14*673dc3d4SNico Weber char *sink[1000];
15*673dc3d4SNico Weber 
main()16*673dc3d4SNico Weber int main() {
17*673dc3d4SNico Weber 
18*673dc3d4SNico Weber   for (int i = 0; i < 3; i++) {
19*673dc3d4SNico Weber     const size_t  kSize = 13000000;
20*673dc3d4SNico Weber     char *x = new char[kSize];
21*673dc3d4SNico Weber     memset(x, 0, kSize);
22*673dc3d4SNico Weber     sink[i] = x;
23*673dc3d4SNico Weber     sleep(1);
24*673dc3d4SNico Weber   }
25*673dc3d4SNico Weber }
26*673dc3d4SNico Weber 
27*673dc3d4SNico Weber // CHECK: HEAP PROFILE at RSS
28*673dc3d4SNico Weber // CHECK: 13000000 byte(s)
29*673dc3d4SNico Weber // CHECK: HEAP PROFILE at RSS
30*673dc3d4SNico Weber // CHECK: 26000000 byte(s)
31*673dc3d4SNico Weber // CHECK: HEAP PROFILE at RSS
32*673dc3d4SNico Weber // CHECK: 39000000 byte(s)
33