Mercurial > hg > CbC > CbC_gcc
comparison libgomp/testsuite/libgomp.c/appendix-a/a.19.1.c @ 0:a06113de4d67
first commit
author | kent <kent@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 17 Jul 2009 14:47:48 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:a06113de4d67 |
---|---|
1 /* { dg-do run } */ | |
2 | |
3 int x, *p = &x; | |
4 extern void abort (void); | |
5 void | |
6 f1 (int *q) | |
7 { | |
8 *q = 1; | |
9 #pragma omp flush | |
10 /* x, p, and *q are flushed */ | |
11 /* because they are shared and accessible */ | |
12 /* q is not flushed because it is not shared. */ | |
13 } | |
14 | |
15 void | |
16 f2 (int *q) | |
17 { | |
18 #pragma omp barrier | |
19 *q = 2; | |
20 #pragma omp barrier | |
21 /* a barrier implies a flush */ | |
22 /* x, p, and *q are flushed */ | |
23 /* because they are shared and accessible */ | |
24 /* q is not flushed because it is not shared. */ | |
25 } | |
26 | |
27 int | |
28 g (int n) | |
29 { | |
30 int i = 1, j, sum = 0; | |
31 *p = 1; | |
32 #pragma omp parallel reduction(+: sum) num_threads(2) | |
33 { | |
34 f1 (&j); | |
35 /* i, n and sum were not flushed */ | |
36 /* because they were not accessible in f1 */ | |
37 /* j was flushed because it was accessible */ | |
38 sum += j; | |
39 f2 (&j); | |
40 /* i, n, and sum were not flushed */ | |
41 /* because they were not accessible in f2 */ | |
42 /* j was flushed because it was accessible */ | |
43 sum += i + j + *p + n; | |
44 } | |
45 return sum; | |
46 } | |
47 | |
48 int | |
49 main () | |
50 { | |
51 int result = g (10); | |
52 if (result != 30) | |
53 abort (); | |
54 return 0; | |
55 } |