Summary: The NVPTX backend is picky about the definitions of functions. Because we call these functions with these arguments it can cause some problems when it goes through the backend. This was observed in a different test for `printf` that hasn't been landed yet. Also adjust the priority.
61 lines
1.4 KiB
C++
61 lines
1.4 KiB
C++
//===-- Loader test to test init and fini array iteration -----------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "test/IntegrationTest/test.h"
|
|
|
|
#include <stddef.h>
|
|
|
|
int global_destroyed = false;
|
|
|
|
class A {
|
|
private:
|
|
int val[1024];
|
|
|
|
public:
|
|
A(int i, int a) {
|
|
for (int k = 0; k < 1024; ++k)
|
|
val[k] = 0;
|
|
val[i] = a;
|
|
}
|
|
|
|
~A() { global_destroyed = true; }
|
|
|
|
int get(int i) const { return val[i]; }
|
|
};
|
|
|
|
int GLOBAL_INDEX = 512;
|
|
int INITVAL_INITIALIZER = 0x600D;
|
|
int BEFORE_INITIALIZER = 0xFEED;
|
|
|
|
A global(GLOBAL_INDEX, INITVAL_INITIALIZER);
|
|
|
|
int initval = 0;
|
|
int before = 0;
|
|
|
|
__attribute__((constructor(101))) void run_before(int, char **, char **) {
|
|
before = BEFORE_INITIALIZER;
|
|
}
|
|
|
|
__attribute__((constructor(65535))) void run_after(int, char **, char **) {
|
|
ASSERT_EQ(before, BEFORE_INITIALIZER);
|
|
}
|
|
|
|
__attribute__((constructor)) void set_initval() {
|
|
initval = INITVAL_INITIALIZER;
|
|
}
|
|
__attribute__((destructor(101))) void reset_initval() {
|
|
ASSERT_TRUE(global_destroyed);
|
|
initval = 0;
|
|
}
|
|
|
|
TEST_MAIN(int argc, char **argv, char **env) {
|
|
ASSERT_EQ(global.get(GLOBAL_INDEX), INITVAL_INITIALIZER);
|
|
ASSERT_EQ(initval, INITVAL_INITIALIZER);
|
|
return 0;
|
|
}
|