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 Doerfertint main() { 35*330d8983SJohannes Doerfert #pragma omp target 36*330d8983SJohannes Doerfert ; 37*330d8983SJohannes Doerfert } 38