1 // Regression test for PR33206
2 //
3 // RUN: %clang -DDYN=1 -DMALLOC=1 -fPIC -shared %s -o %t-dso1.so
4 // RUN: %clang -DDYN=1 -DMALLOC=1 -fPIC -shared %s -o %t-dso2.so %t-dso1.so
5 // RUN: %clang %s -o %t-1 %t-dso2.so
6 // RUN: env LD_PRELOAD=%shared_libasan %run %t-1 2>&1 | FileCheck %s
7 // RUN: %clang -DDYN=1 -DREALLOC=1 -fPIC -shared %s -o %t-dso3.so
8 // RUN: %clang -DDYN=1 -DREALLOC=1 -fPIC -shared %s -o %t-dso4.so %t-dso3.so
9 // RUN: %clang %s -o %t-2 %t-dso4.so
10 // RUN: env LD_PRELOAD=%shared_libasan %run %t-2 2>&1 | FileCheck %s
11 // REQUIRES: asan-dynamic-runtime
12 
13 // FIXME: Test regressed while android bot was disabled. Needs investigation.
14 // UNSUPPORTED: android
15 
16 #include <stdlib.h>
17 #include <stdio.h>
18 
19 #ifdef DYN
foo()20 __attribute__((constructor)) void foo() {
21   void *p;
22 #ifdef MALLOC
23   p = malloc(1 << 20);
24 #endif
25 #ifdef REALLOC
26   p = realloc (0, 1 << 20);
27 #endif
28   free(p);
29 }
30 #else
main()31 int main() {
32   // CHECK: Success
33   printf("Success\n");
34   return 0;
35 }
36 #endif
37