xref: /llvm-project/offload/test/offloading/target_constexpr_mapping.cpp (revision 330d8983d25d08580fc1642fea48b2473f47a9da)
1*330d8983SJohannes Doerfert // RUN: %libomptarget-compileoptxx-run-and-check-generic
2*330d8983SJohannes Doerfert 
3*330d8983SJohannes Doerfert #include <omp.h>
4*330d8983SJohannes Doerfert #include <stdio.h>
5*330d8983SJohannes Doerfert 
6*330d8983SJohannes Doerfert #pragma omp declare target
7*330d8983SJohannes Doerfert class A {
8*330d8983SJohannes Doerfert public:
9*330d8983SJohannes Doerfert   constexpr static double pi = 3.141592653589793116;
A()10*330d8983SJohannes Doerfert   A() { ; }
~A()11*330d8983SJohannes Doerfert   ~A() { ; }
12*330d8983SJohannes Doerfert };
13*330d8983SJohannes Doerfert #pragma omp end declare target
14*330d8983SJohannes Doerfert 
15*330d8983SJohannes Doerfert #pragma omp declare target
16*330d8983SJohannes Doerfert constexpr static double anotherPi = 3.14;
17*330d8983SJohannes Doerfert #pragma omp end declare target
18*330d8983SJohannes Doerfert 
main()19*330d8983SJohannes Doerfert int main() {
20*330d8983SJohannes Doerfert   double a[2];
21*330d8983SJohannes Doerfert #pragma omp target map(tofrom : a[:2])
22*330d8983SJohannes Doerfert   {
23*330d8983SJohannes Doerfert     a[0] = A::pi;
24*330d8983SJohannes Doerfert     a[1] = anotherPi;
25*330d8983SJohannes Doerfert   }
26*330d8983SJohannes Doerfert 
27*330d8983SJohannes Doerfert   // CHECK: pi = 3.141592653589793116
28*330d8983SJohannes Doerfert   printf("pi = %.18f\n", a[0]);
29*330d8983SJohannes Doerfert 
30*330d8983SJohannes Doerfert   // CHECK: anotherPi = 3.14
31*330d8983SJohannes Doerfert   printf("anotherPi = %.2f\n", a[1]);
32*330d8983SJohannes Doerfert 
33*330d8983SJohannes Doerfert   return 0;
34*330d8983SJohannes Doerfert }
35