1 //===-- Loader test to test init and fini array iteration -----------------===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 #include "test/IntegrationTest/test.h"
13 int global_destroyed
= false;
21 for (int k
= 0; k
< 1024; ++k
)
26 ~A() { global_destroyed
= true; }
28 int get(int i
) const { return val
[i
]; }
31 int GLOBAL_INDEX
= 512;
32 int INITVAL_INITIALIZER
= 0x600D;
34 A
global(GLOBAL_INDEX
, INITVAL_INITIALIZER
);
39 __attribute__((constructor
)) void set_initval() {
40 initval
= INITVAL_INITIALIZER
;
42 __attribute__((destructor(1))) void reset_initval() {
43 ASSERT_TRUE(global_destroyed
);
44 ASSERT_EQ(preinitval
, 0);
48 void set_preinitval() { preinitval
= INITVAL_INITIALIZER
; }
49 __attribute__((destructor(2))) void reset_preinitval() {
50 ASSERT_TRUE(global_destroyed
);
51 ASSERT_EQ(initval
, INITVAL_INITIALIZER
);
55 using PreInitFunc
= void();
56 __attribute__((section(".preinit_array"))) PreInitFunc
*preinit_func_ptr
=
60 ASSERT_EQ(global
.get(GLOBAL_INDEX
), INITVAL_INITIALIZER
);
61 ASSERT_EQ(initval
, INITVAL_INITIALIZER
);
62 ASSERT_EQ(preinitval
, INITVAL_INITIALIZER
);