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 Weberstatic void foo() { 8*673dc3d4SNico Weber ++c; 9*673dc3d4SNico Weber } 10*673dc3d4SNico Weber fini()11*673dc3d4SNico Weberstatic void fini() { 12*673dc3d4SNico Weber printf("fini\n"); 13*673dc3d4SNico Weber } 14*673dc3d4SNico Weber main()15*673dc3d4SNico Weberint 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