PR target/77349
[official-gcc.git] / libgomp / testsuite / libgomp.hsa.c / formal-actual-args-1.c
blob058a036d371658dd371a16f210d6716ddb70e199
1 #include <assert.h>
3 struct Cube
5 int x;
6 int y;
7 int z;
8 };
10 #pragma omp declare target
11 int
12 foo (short a)
14 switch (a)
16 case 1:
17 return 11;
18 break;
19 case 33:
20 return 333;
21 break;
22 case 55:
23 return 55;
24 break;
25 default:
26 return -1;
30 int
31 bar (int a)
33 int *ptr = &a;
35 *ptr = 100;
36 return a + *ptr;
39 struct Cube
40 baz (struct Cube c)
42 c.x = 11;
43 return c;
46 #pragma omp end declare target
48 #define s 100
50 int
51 main (int argc)
53 /* Test 1: argument types: char to short. */
55 int array[s];
56 #pragma omp target map(tofrom : array[ : s])
58 for (char i = 0; i < s; i++)
59 array[i] = foo (i);
62 for (int i = 0; i < s; i++)
63 assert (array[i] == foo (i));
65 /* Test 2: argument address is taken. */
66 int v = 2;
68 #pragma omp target map(tofrom : v)
69 v = bar (v);
71 assert (v == 200);
73 /* Test 3: passing a structure as a function argument. */
74 struct Cube r;
75 struct Cube c = {.x = 1, .y = 2, .z = 3};
77 #pragma omp target map(to : r) map(from : c)
78 r = baz (c);
80 assert (r.x == 11);
81 assert (r.y == c.y);
82 assert (r.z == c.z);