// RUN: %libomp-compile-and-run | |
#include <stdio.h> | |
#include "omp_testsuite.h" | |
int test_omp_master_3() | |
{ | |
int nthreads; | |
int executing_thread; | |
int tid_result = 0; /* counts up the number of wrong thread no. for | |
the master thread. (Must be 0) */ | |
nthreads = 0; | |
executing_thread = -1; | |
#pragma omp parallel | |
{ | |
#pragma omp master | |
{ | |
int tid = omp_get_thread_num(); | |
if (tid != 0) { | |
#pragma omp critical | |
{ tid_result++; } | |
} | |
#pragma omp critical | |
{ | |
nthreads++; | |
} | |
executing_thread = omp_get_thread_num (); | |
} /* end of master*/ | |
} /* end of parallel*/ | |
return ((nthreads == 1) && (executing_thread == 0) && (tid_result == 0)); | |
} | |
int main() | |
{ | |
int i; | |
int num_failed=0; | |
for(i = 0; i < REPETITIONS; i++) { | |
if(!test_omp_master_3()) { | |
num_failed++; | |
} | |
} | |
return num_failed; | |
} |