1*673dc3d4SNico Weber // RUN: %clangxx_asan %s -o %t && %run %t | FileCheck %s
2*673dc3d4SNico Weber 
3*673dc3d4SNico Weber #include <stdio.h>
4*673dc3d4SNico Weber 
5*673dc3d4SNico Weber int c = 0;
6*673dc3d4SNico Weber 
foo()7*673dc3d4SNico Weber static void foo() {
8*673dc3d4SNico Weber   ++c;
9*673dc3d4SNico Weber }
10*673dc3d4SNico Weber 
fini()11*673dc3d4SNico Weber static void fini() {
12*673dc3d4SNico Weber   printf("fini\n");
13*673dc3d4SNico Weber }
14*673dc3d4SNico Weber 
main()15*673dc3d4SNico Weber int main() {
16*673dc3d4SNico Weber   printf("c=%d\n", c);
17*673dc3d4SNico Weber   return 0;
18*673dc3d4SNico Weber }
19*673dc3d4SNico Weber 
20*673dc3d4SNico Weber __attribute__((section(".preinit_array")))
21*673dc3d4SNico Weber void (*call_foo)(void) = &foo;
22*673dc3d4SNico Weber 
23*673dc3d4SNico Weber __attribute__((section(".init_array")))
24*673dc3d4SNico Weber void (*call_foo_2)(void) = &foo;
25*673dc3d4SNico Weber 
26*673dc3d4SNico Weber __attribute__((section(".fini_array")))
27*673dc3d4SNico Weber void (*call_foo_3)(void) = &fini;
28*673dc3d4SNico Weber 
29*673dc3d4SNico Weber // CHECK: c=2
30*673dc3d4SNico Weber // CHECK: fini
31