1 /* { dg-additional-options "-Wno-deprecated-declarations" } */ 2 3 #include <stdlib.h> 4 #include <omp.h> 5 6 int main(void)7main (void) 8 { 9 double d, e; 10 int l; 11 omp_lock_t lck; 12 omp_nest_lock_t nlck; 13 14 d = omp_get_wtime (); 15 16 omp_init_lock (&lck); 17 omp_set_lock (&lck); 18 if (omp_test_lock (&lck)) 19 abort (); 20 omp_unset_lock (&lck); 21 if (! omp_test_lock (&lck)) 22 abort (); 23 if (omp_test_lock (&lck)) 24 abort (); 25 omp_unset_lock (&lck); 26 omp_destroy_lock (&lck); 27 28 omp_init_nest_lock (&nlck); 29 if (omp_test_nest_lock (&nlck) != 1) 30 abort (); 31 omp_set_nest_lock (&nlck); 32 if (omp_test_nest_lock (&nlck) != 3) 33 abort (); 34 omp_unset_nest_lock (&nlck); 35 omp_unset_nest_lock (&nlck); 36 if (omp_test_nest_lock (&nlck) != 2) 37 abort (); 38 omp_unset_nest_lock (&nlck); 39 omp_unset_nest_lock (&nlck); 40 omp_destroy_nest_lock (&nlck); 41 42 omp_set_dynamic (1); 43 if (! omp_get_dynamic ()) 44 abort (); 45 omp_set_dynamic (0); 46 if (omp_get_dynamic ()) 47 abort (); 48 49 omp_set_nested (1); 50 if (! omp_get_nested ()) 51 abort (); 52 omp_set_nested (0); 53 if (omp_get_nested ()) 54 abort (); 55 56 omp_set_num_threads (5); 57 if (omp_get_num_threads () != 1) 58 abort (); 59 if (omp_get_max_threads () != 5) 60 abort (); 61 if (omp_get_thread_num () != 0) 62 abort (); 63 omp_set_num_threads (3); 64 if (omp_get_num_threads () != 1) 65 abort (); 66 if (omp_get_max_threads () != 3) 67 abort (); 68 if (omp_get_thread_num () != 0) 69 abort (); 70 l = 0; 71 #pragma omp parallel reduction (|:l) 72 { 73 l = omp_get_num_threads () != 3; 74 l |= omp_get_thread_num () < 0; 75 l |= omp_get_thread_num () >= 3; 76 #pragma omp master 77 l |= omp_get_thread_num () != 0; 78 } 79 if (l) 80 abort (); 81 82 if (omp_get_num_procs () <= 0) 83 abort (); 84 if (omp_in_parallel ()) 85 abort (); 86 #pragma omp parallel reduction (|:l) 87 l = ! omp_in_parallel (); 88 #pragma omp parallel reduction (|:l) if (1) 89 l = ! omp_in_parallel (); 90 if (l) 91 abort (); 92 93 e = omp_get_wtime (); 94 if (d > e) 95 abort (); 96 d = omp_get_wtick (); 97 /* Negative precision is definitely wrong, 98 bigger than 1s clock resolution is also strange. */ 99 if (d <= 0 || d > 1) 100 abort (); 101 102 return 0; 103 } 104