brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.1 KiB · 73a7afb Raw
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