Test which checks the omp do firstprivate clause by counting up a variable in a parallelized loop. Each thread has a firstprivate variable (1) and an variable (2) declared by do firstprivate. First it stores the result of its last iteration in variable (2). Then it stores the value of the variable (2) in its firstprivate variable (1). At the end all firstprivate variables (1) are added to a total sum in a critical section and compared with the correct result. 2.0 omp do firstprivate omp parallel private, omp critical INTEGER FUNCTION do_firstprivate() IMPLICIT NONE INTEGER sum, known_sum INTEGER numthreads INTEGER omp_get_num_threads INTEGER sum0, sum1, i COMMON /orphvars/ sum0, sum1, i INCLUDE "omp_testsuite.f" sum = 0 sum0 = 12345 sum1 = 0 !$omp parallel firstprivate(sum1) !$omp single numthreads = omp_get_num_threads() !$omp end single !$omp do firstprivate(sum0)private (sum0) DO i=1,LOOPCOUNT sum0 = sum0 + i sum1 = sum0 END DO !$omp end do !$omp critical WRITE (1,*) sum0 sum = sum + sum1 !$omp end critical !$omp end parallel known_sum=12345*numthreads+ (LOOPCOUNT*(LOOPCOUNT+1))/2 IF ( known_sum .EQ. sum ) THEN = 1 ELSE WRITE (1,*) "Found sum was", sum, "instead of", known_sum = 0 END IF END FUNCTION