1// RUN: %libomp-compile-and-run
2#include <stdio.h>
3#include "omp_testsuite.h"
4
5int test_omp_section_lastprivate()
6{
7 int i0 = -1;
8 int sum = 0;
9 int i;
10 int sum0 = 0;
11 int known_sum;
12
13 i0 = -1;
14 sum = 0;
15
16 #pragma omp parallel
17 {
18 #pragma omp sections lastprivate(i0) private(i,sum0)
19 {
20 #pragma omp section
21 {
22 sum0 = 0;
23 for (i = 1; i < 400; i++)
24 {
25 sum0 = sum0 + i;
26 i0 = i;
27 }
28 #pragma omp critical
29 {
30 sum = sum + sum0;
31 } /*end of critical*/
32 } /* end of section */
33 #pragma omp section
34 {
35 sum0 = 0;
36 for(i = 400; i < 700; i++)
37 {
38 sum0 = sum0 + i;
39 i0 = i;
40 }
41 #pragma omp critical
42 {
43 sum = sum + sum0;
44 } /*end of critical*/
45 }
46 #pragma omp section
47 {
48 sum0 = 0;
49 for(i = 700; i < 1000; i++)
50 {
51 sum0 = sum0 + i;
52 i0 = i;
53 }
54 #pragma omp critical
55 {
56 sum = sum + sum0;
57 } /*end of critical*/
58 } /* end of section */
59 } /* end of sections*/
60 } /* end of parallel*/
61 known_sum = (999 * 1000) / 2;
62 return ((known_sum == sum) && (i0 == 999) );
63}
64
65int main()
66{
67 int i;
68 int num_failed=0;
69
70 for(i = 0; i < REPETITIONS; i++) {
71 if(!test_omp_section_lastprivate()) {
72 num_failed++;
73 }
74 }
75 return num_failed;
76}
77

source code of openmp/runtime/test/worksharing/sections/omp_section_lastprivate.c