54 lines · c
1// RUN: %libomp-compile-and-run2#include <stdio.h>3#include "omp_testsuite.h"4/* The bug occurs if the lock table is reallocated after5 kmp_set_defaults() is called. If the table is reallocated,6 then the lock will not point to a valid lock object after the7 kmp_set_defaults() call.*/8omp_lock_t lock;9 10int test_kmp_set_defaults_lock_bug()11{12 /* checks that omp_get_num_threads is equal to the number of13 threads */14 int nthreads_lib;15 int nthreads = 0;16 17 nthreads_lib = -1;18 19 #pragma omp parallel20 {21 omp_set_lock(&lock);22 nthreads++;23 omp_unset_lock(&lock);24 #pragma omp single25 {26 nthreads_lib = omp_get_num_threads ();27 } /* end of single */28 } /* end of parallel */29 kmp_set_defaults("OMP_NUM_THREADS");30 #pragma omp parallel31 {32 omp_set_lock(&lock);33 nthreads++;34 omp_unset_lock(&lock);35 } /* end of parallel */36 37 return (nthreads == 2*nthreads_lib);38}39 40int main()41{42 int i;43 int num_failed=0;44 omp_init_lock(&lock);45 46 for(i = 0; i < REPETITIONS; i++) {47 if(!test_kmp_set_defaults_lock_bug()) {48 num_failed++;49 }50 }51 omp_destroy_lock(&lock);52 return num_failed;53}54