Index: runtime/src/kmp_lock.h =================================================================== --- runtime/src/kmp_lock.h +++ runtime/src/kmp_lock.h @@ -649,7 +649,7 @@ } \ } \ if (lck->tas.lk.poll != 0 || \ - !__kmp_compare_and_store_acq(&lck->tas.lk.poll, 0, gtid + 1)) { \ + !__kmp_atomic_compare_store_acq(&lck->tas.lk.poll, 0, gtid + 1)) { \ kmp_uint32 spins; \ KMP_FSYNC_PREPARE(lck); \ KMP_INIT_YIELD(spins); \ @@ -659,8 +659,8 @@ } else { \ KMP_YIELD_SPIN(spins); \ } \ - while (lck->tas.lk.poll != 0 || \ - !__kmp_compare_and_store_acq(&lck->tas.lk.poll, 0, gtid + 1)) { \ + while (lck->tas.lk.poll != 0 || !__kmp_atomic_compare_store_acq( \ + &lck->tas.lk.poll, 0, gtid + 1)) { \ if (TCR_4(__kmp_nth) > \ (__kmp_avail_proc ? __kmp_avail_proc : __kmp_xproc)) { \ KMP_YIELD(TRUE); \ @@ -702,7 +702,7 @@ } } return ((lck->tas.lk.poll == 0) && - __kmp_compare_and_store_acq(&lck->tas.lk.poll, 0, gtid + 1)); + __kmp_atomic_compare_store_acq(&lck->tas.lk.poll, 0, gtid + 1)); } else { KMP_DEBUG_ASSERT(__kmp_test_user_lock_with_checks_ != NULL); return (*__kmp_test_user_lock_with_checks_)(lck, gtid); @@ -767,7 +767,7 @@ *depth = KMP_LOCK_ACQUIRED_NEXT; \ } else { \ if ((lck->tas.lk.poll != 0) || \ - !__kmp_compare_and_store_acq(&lck->tas.lk.poll, 0, gtid + 1)) { \ + !__kmp_atomic_compare_store_acq(&lck->tas.lk.poll, 0, gtid + 1)) { \ kmp_uint32 spins; \ KMP_FSYNC_PREPARE(lck); \ KMP_INIT_YIELD(spins); \ @@ -777,8 +777,9 @@ } else { \ KMP_YIELD_SPIN(spins); \ } \ - while ((lck->tas.lk.poll != 0) || \ - !__kmp_compare_and_store_acq(&lck->tas.lk.poll, 0, gtid + 1)) { \ + while ( \ + (lck->tas.lk.poll != 0) || \ + !__kmp_atomic_compare_store_acq(&lck->tas.lk.poll, 0, gtid + 1)) { \ if (TCR_4(__kmp_nth) > \ (__kmp_avail_proc ? __kmp_avail_proc : __kmp_xproc)) { \ KMP_YIELD(TRUE); \ @@ -826,7 +827,7 @@ return ++lck->tas.lk.depth_locked; /* same owner, depth increased */ } retval = ((lck->tas.lk.poll == 0) && - __kmp_compare_and_store_acq(&lck->tas.lk.poll, 0, gtid + 1)); + __kmp_atomic_compare_store_acq(&lck->tas.lk.poll, 0, gtid + 1)); if (retval) { KMP_MB(); lck->tas.lk.depth_locked = 1; Index: runtime/src/kmp_lock.cpp =================================================================== --- runtime/src/kmp_lock.cpp +++ runtime/src/kmp_lock.cpp @@ -3357,7 +3357,7 @@ #endif static int __kmp_is_ticket_lock_initialized(kmp_ticket_lock_t *lck) { - return lck == lck->lk.initialized; + return lck == lck->lk.self; } static void __kmp_init_ticket_lock_with_checks(kmp_ticket_lock_t *lck) { Index: runtime/src/kmp_tasking.cpp =================================================================== --- runtime/src/kmp_tasking.cpp +++ runtime/src/kmp_tasking.cpp @@ -811,8 +811,10 @@ kmp_taskdata_t *resumed_task) { kmp_taskdata_t *taskdata = KMP_TASK_TO_TASKDATA(task); kmp_info_t *thread = __kmp_threads[gtid]; +#if OMP_45_ENABLED kmp_task_team_t *task_team = thread->th.th_task_team; // might be NULL for serial teams... +#endif // OMP_45_ENABLED kmp_int32 children = 0; KA_TRACE(10, ("__kmp_task_finish(enter): T#%d finishing task %p and resuming " Index: runtime/test/api/omp_alloc.c =================================================================== --- runtime/test/api/omp_alloc.c +++ runtime/test/api/omp_alloc.c @@ -1,4 +1,7 @@ // RUN: %libomp-compile-and-run + +// REQUIRES: openmp-5.0 + #include #include #include Index: runtime/test/lit.cfg =================================================================== --- runtime/test/lit.cfg +++ runtime/test/lit.cfg @@ -91,6 +91,15 @@ # for callback.h config.test_flags += " -I " + config.test_source_root + "/ompt" +if config.libomp_omp_version >= 50: + config.available_features.add("openmp-5.0") + +if config.libomp_omp_version >= 45: + config.available_features.add("openmp-4.5") + +if config.libomp_omp_version >= 40: + config.available_features.add("openmp-4.0") + if 'Linux' in config.operating_system: config.available_features.add("linux") Index: runtime/test/lit.site.cfg.in =================================================================== --- runtime/test/lit.site.cfg.in +++ runtime/test/lit.site.cfg.in @@ -6,6 +6,7 @@ config.test_filecheck = "@OPENMP_FILECHECK_EXECUTABLE@" config.test_openmp_flags = "@OPENMP_TEST_OPENMP_FLAGS@" config.test_extra_flags = "@OPENMP_TEST_FLAGS@" +config.libomp_omp_version = @LIBOMP_OMP_VERSION@ config.libomp_obj_root = "@CMAKE_CURRENT_BINARY_DIR@" config.library_dir = "@LIBOMP_LIBRARY_DIR@" config.omp_header_directory = "@LIBOMP_BINARY_DIR@/src" Index: runtime/test/ompt/misc/control_tool_no_ompt_support.c =================================================================== --- runtime/test/ompt/misc/control_tool_no_ompt_support.c +++ runtime/test/ompt/misc/control_tool_no_ompt_support.c @@ -1,4 +1,7 @@ // RUN: %libomp-compile-and-run + +// REQUIRES: openmp-5.0 + #include int main() Index: runtime/test/tasking/bug_nested_proxy_task.c =================================================================== --- runtime/test/tasking/bug_nested_proxy_task.c +++ runtime/test/tasking/bug_nested_proxy_task.c @@ -1,4 +1,5 @@ // RUN: %libomp-compile -lpthread && %libomp-run +// REQUIRES: openmp-4.5 // The runtime currently does not get dependency information from GCC. // UNSUPPORTED: gcc Index: runtime/test/tasking/bug_proxy_task_dep_waiting.c =================================================================== --- runtime/test/tasking/bug_proxy_task_dep_waiting.c +++ runtime/test/tasking/bug_proxy_task_dep_waiting.c @@ -1,4 +1,5 @@ // RUN: %libomp-compile -lpthread && %libomp-run +// REQUIRES: openmp-4.5 // The runtime currently does not get dependency information from GCC. // UNSUPPORTED: gcc Index: runtime/test/tasking/kmp_task_reduction_nest.cpp =================================================================== --- runtime/test/tasking/kmp_task_reduction_nest.cpp +++ runtime/test/tasking/kmp_task_reduction_nest.cpp @@ -1,5 +1,6 @@ // RUN: %libomp-cxx-compile-and-run // RUN: %libomp-cxx-compile -DFLG=1 && %libomp-run +// REQUIRES: openmp-5.0 // GCC-5 is needed for OpenMP 4.0 support (taskgroup) // XFAIL: gcc-4 #include Index: runtime/test/tasking/kmp_taskloop.c =================================================================== --- runtime/test/tasking/kmp_taskloop.c +++ runtime/test/tasking/kmp_taskloop.c @@ -1,5 +1,6 @@ // RUN: %libomp-compile-and-run // RUN: %libomp-compile && env KMP_TASKLOOP_MIN_TASKS=1 %libomp-run +// REQUIRES: openmp-4.5 #include #include #include "omp_my_sleep.h" Index: runtime/test/tasking/omp_task_priority.c =================================================================== --- runtime/test/tasking/omp_task_priority.c +++ runtime/test/tasking/omp_task_priority.c @@ -1,4 +1,5 @@ // RUN: %libomp-compile && env OMP_MAX_TASK_PRIORITY=42 %libomp-run +// REQUIRES: openmp-4.5 // Test OMP 4.5 task priorities // Currently only API function and envirable parsing implemented. // Test environment sets envirable: OMP_MAX_TASK_PRIORITY=42 as tested below. Index: runtime/test/tasking/omp_taskloop_grainsize.c =================================================================== --- runtime/test/tasking/omp_taskloop_grainsize.c +++ runtime/test/tasking/omp_taskloop_grainsize.c @@ -1,5 +1,6 @@ // RUN: %libomp-compile-and-run // RUN: %libomp-compile && env KMP_TASKLOOP_MIN_TASKS=1 %libomp-run +// REQUIRES: openmp-4.5 // These compilers don't support the taskloop construct // UNSUPPORTED: gcc-4, gcc-5, icc-16 Index: runtime/test/tasking/omp_taskloop_num_tasks.c =================================================================== --- runtime/test/tasking/omp_taskloop_num_tasks.c +++ runtime/test/tasking/omp_taskloop_num_tasks.c @@ -1,5 +1,6 @@ // RUN: %libomp-compile-and-run // RUN: %libomp-compile && env KMP_TASKLOOP_MIN_TASKS=1 %libomp-run +// REQUIRES: openmp-4.5 // These compilers don't support the taskloop construct // UNSUPPORTED: gcc-4, gcc-5, icc-16 Index: runtime/test/worksharing/for/kmp_doacross_check.c =================================================================== --- runtime/test/worksharing/for/kmp_doacross_check.c +++ runtime/test/worksharing/for/kmp_doacross_check.c @@ -1,4 +1,5 @@ // RUN: %libomp-compile-and-run +// REQUIRES: openmp-4.5 // UNSUPPORTED: gcc // This test is incompatible with gcc because of the explicit call to // __kmpc_doacross_fini(). gcc relies on an implicit call to this function Index: runtime/test/worksharing/for/kmp_sch_simd_guided.c =================================================================== --- runtime/test/worksharing/for/kmp_sch_simd_guided.c +++ runtime/test/worksharing/for/kmp_sch_simd_guided.c @@ -1,4 +1,5 @@ // RUN: %libomp-compile-and-run +// REQUIRES: openmp-4.5 /* Test for the 'schedule(simd:guided)' clause. Compiler needs to generate a dynamic dispatching and pass the schedule Index: runtime/test/worksharing/for/kmp_sch_simd_runtime_api.c =================================================================== --- runtime/test/worksharing/for/kmp_sch_simd_runtime_api.c +++ runtime/test/worksharing/for/kmp_sch_simd_runtime_api.c @@ -1,4 +1,5 @@ // RUN: %libomp-compile-and-run +// REQUIRES: openmp-4.5 // The test checks schedule(simd:runtime) // in combination with omp_set_schedule() Index: runtime/test/worksharing/for/kmp_sch_simd_runtime_guided.c =================================================================== --- runtime/test/worksharing/for/kmp_sch_simd_runtime_guided.c +++ runtime/test/worksharing/for/kmp_sch_simd_runtime_guided.c @@ -6,6 +6,7 @@ // RUN: env OMP_SCHEDULE=dynamic,1 %libomp-run 1 // RUN: env OMP_SCHEDULE=dynamic,2 %libomp-run 2 // RUN: env OMP_SCHEDULE=auto %libomp-run +// REQUIRES: openmp-4.5 // The test checks schedule(simd:runtime) // in combination with OMP_SCHEDULE=guided[,chunk] Index: runtime/test/worksharing/for/kmp_sch_simd_runtime_static.c =================================================================== --- runtime/test/worksharing/for/kmp_sch_simd_runtime_static.c +++ runtime/test/worksharing/for/kmp_sch_simd_runtime_static.c @@ -1,5 +1,6 @@ // RUN: %libomp-compile && %libomp-run // RUN: %libomp-run 1 && %libomp-run 2 +// REQUIRES: openmp-4.5 // The test checks schedule(simd:runtime) // in combination with OMP_SCHEDULE=static[,chunk] Index: runtime/test/worksharing/for/omp_doacross.c =================================================================== --- runtime/test/worksharing/for/omp_doacross.c +++ runtime/test/worksharing/for/omp_doacross.c @@ -1,4 +1,5 @@ // RUN: %libomp-compile-and-run +// REQUIRES: openmp-4.5 // XFAIL: gcc-4, gcc-5, clang-3.7, clang-3.8, icc-15, icc-16 #include #include