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