xref: /llvm-project/offload/test/offloading/global_constructor.cpp (revision 330d8983d25d08580fc1642fea48b2473f47a9da)
1*330d8983SJohannes Doerfert // RUN: %libomptarget-compilexx-generic && %libomptarget-run-generic | %fcheck-generic
2*330d8983SJohannes Doerfert 
3*330d8983SJohannes Doerfert #include <cstdio>
4*330d8983SJohannes Doerfert 
foo()5*330d8983SJohannes Doerfert int foo() { return 1; }
6*330d8983SJohannes Doerfert 
7*330d8983SJohannes Doerfert class C {
8*330d8983SJohannes Doerfert public:
C()9*330d8983SJohannes Doerfert   C() : x(foo()) {}
10*330d8983SJohannes Doerfert 
11*330d8983SJohannes Doerfert   int x;
12*330d8983SJohannes Doerfert };
13*330d8983SJohannes Doerfert 
14*330d8983SJohannes Doerfert C c;
15*330d8983SJohannes Doerfert #pragma omp declare target(c)
16*330d8983SJohannes Doerfert 
main()17*330d8983SJohannes Doerfert int main() {
18*330d8983SJohannes Doerfert   int x = 0;
19*330d8983SJohannes Doerfert #pragma omp target map(from : x)
20*330d8983SJohannes Doerfert   { x = c.x; }
21*330d8983SJohannes Doerfert 
22*330d8983SJohannes Doerfert   // CHECK: PASS
23*330d8983SJohannes Doerfert   if (x == 1)
24*330d8983SJohannes Doerfert     printf("PASS\n");
25*330d8983SJohannes Doerfert }
26