52 lines · c
1// RUN: %libomp-compile-and-run2#include <stdio.h>3#include <math.h>4#include "omp_testsuite.h"5 6int test_omp_task_firstprivate()7{8 int i;9 int sum = 1234;10 int known_sum;11 int result = 0; /* counts the wrong sums from tasks */12 13 known_sum = 1234 + (LOOPCOUNT * (LOOPCOUNT + 1)) / 2;14 15 #pragma omp parallel16 {17 #pragma omp single18 {19 for (i = 0; i < NUM_TASKS; i++) {20 #pragma omp task firstprivate(sum)21 {22 int j;23 for (j = 0; j <= LOOPCOUNT; j++) {24 #pragma omp flush25 sum += j;26 }27 28 /* check if calculated sum was right */29 if (sum != known_sum) {30 #pragma omp critical31 { result++; }32 }33 } /* omp task */34 } /* for loop */35 } /* omp single */36 } /* omp parallel */37 return (result == 0);38}39 40int main()41{42 int i;43 int num_failed=0;44 45 for(i = 0; i < REPETITIONS; i++) {46 if(!test_omp_task_firstprivate()) {47 num_failed++;48 }49 }50 return num_failed;51}52