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;
33 int BEFORE_INITIALIZER
= 0xFEED;
35 A
global(GLOBAL_INDEX
, INITVAL_INITIALIZER
);
40 __attribute__((constructor(101))) void run_before() {
41 before
= BEFORE_INITIALIZER
;
44 __attribute__((constructor(65535))) void run_after() {
45 ASSERT_EQ(before
, BEFORE_INITIALIZER
);
48 __attribute__((constructor
)) void set_initval() {
49 initval
= INITVAL_INITIALIZER
;
51 __attribute__((destructor(101))) void reset_initval() {
52 ASSERT_TRUE(global_destroyed
);
56 TEST_MAIN(int argc
, char **argv
, char **env
) {
57 ASSERT_EQ(global
.get(GLOBAL_INDEX
), INITVAL_INITIALIZER
);
58 ASSERT_EQ(initval
, INITVAL_INITIALIZER
);