xref: /llvm-project/offload/test/libc/global_ctor_dtor.cpp (revision 330d8983d25d08580fc1642fea48b2473f47a9da)
1*330d8983SJohannes Doerfert // RUN: %libomptarget-compilexx-run-and-check-generic
2*330d8983SJohannes Doerfert 
3*330d8983SJohannes Doerfert // REQUIRES: libc
4*330d8983SJohannes Doerfert 
5*330d8983SJohannes Doerfert #include <stdio.h>
6*330d8983SJohannes Doerfert 
7*330d8983SJohannes Doerfert #pragma omp begin declare target device_type(nohost)
8*330d8983SJohannes Doerfert 
9*330d8983SJohannes Doerfert // CHECK: void ctor1()
10*330d8983SJohannes Doerfert // CHECK: void ctor2()
11*330d8983SJohannes Doerfert // CHECK: void ctor3()
ctor1()12*330d8983SJohannes Doerfert [[gnu::constructor(101)]] void ctor1() { puts(__PRETTY_FUNCTION__); }
ctor2()13*330d8983SJohannes Doerfert [[gnu::constructor(102)]] void ctor2() { puts(__PRETTY_FUNCTION__); }
ctor3()14*330d8983SJohannes Doerfert [[gnu::constructor(103)]] void ctor3() { puts(__PRETTY_FUNCTION__); }
15*330d8983SJohannes Doerfert 
16*330d8983SJohannes Doerfert struct S {
SS17*330d8983SJohannes Doerfert   S() { puts(__PRETTY_FUNCTION__); }
~SS18*330d8983SJohannes Doerfert   ~S() { puts(__PRETTY_FUNCTION__); }
19*330d8983SJohannes Doerfert };
20*330d8983SJohannes Doerfert 
21*330d8983SJohannes Doerfert // CHECK: S::S()
22*330d8983SJohannes Doerfert // CHECK: S::~S()
23*330d8983SJohannes Doerfert S s;
24*330d8983SJohannes Doerfert 
25*330d8983SJohannes Doerfert // CHECK: void dtor3()
26*330d8983SJohannes Doerfert // CHECK: void dtor2()
27*330d8983SJohannes Doerfert // CHECK: void dtor1()
dtor1()28*330d8983SJohannes Doerfert [[gnu::destructor(101)]] void dtor1() { puts(__PRETTY_FUNCTION__); }
dtor3()29*330d8983SJohannes Doerfert [[gnu::destructor(103)]] void dtor3() { puts(__PRETTY_FUNCTION__); }
dtor2()30*330d8983SJohannes Doerfert [[gnu::destructor(102)]] void dtor2() { puts(__PRETTY_FUNCTION__); }
31*330d8983SJohannes Doerfert 
32*330d8983SJohannes Doerfert #pragma omp end declare target
33*330d8983SJohannes Doerfert 
main()34*330d8983SJohannes Doerfert int main() {
35*330d8983SJohannes Doerfert #pragma omp target
36*330d8983SJohannes Doerfert   ;
37*330d8983SJohannes Doerfert }
38