#include #include #include #define uchar unsigned char #define C 123 #define TEST(type) \ type foo_##type (void) \ { \ _Complex type a = C + 45I; \ return __real__ a; \ } #pragma omp declare target TEST (char) TEST (uchar) TEST (short) TEST (int) float bar (float a, float b) { _Complex float c = a + b * I; c += 11.f + 12.f * I; _Complex float d = 2.f + 4.44f * I; return __real__(crealf (c + d) + cimag (d) * I); } #pragma omp end declare target int main (void) { int v = 0; float v2 = 0.0f; #pragma omp target map(to: v) v = foo_char (); assert (v == C); #pragma omp target map(to: v) v = foo_uchar (); assert (v == C); #pragma omp target map(to: v) v = foo_short (); assert (v == C); #pragma omp target map(to: v) v = foo_int (); assert (v == C); #pragma omp target map(to: v2) v2 = bar (1.12f, 4.44f); assert (fabs (v2 - 14.12) < 0.0001f); }