Index: openmp/trunk/runtime/src/kmp_tasking.cpp =================================================================== --- openmp/trunk/runtime/src/kmp_tasking.cpp +++ openmp/trunk/runtime/src/kmp_tasking.cpp @@ -1025,6 +1025,9 @@ kmp_taskdata_t *parent_task = thread->th.th_current_task; size_t shareds_offset; + if (!TCR_4(__kmp_init_middle)) + __kmp_middle_initialize(); + KA_TRACE(10, ("__kmp_task_alloc(enter): T#%d loc=%p, flags=(0x%x) " "sizeof_task=%ld sizeof_shared=%ld entry=%p\n", gtid, loc_ref, *((kmp_int32 *)flags), sizeof_kmp_task_t, Index: openmp/trunk/runtime/test/tasking/bug_36720.c =================================================================== --- openmp/trunk/runtime/test/tasking/bug_36720.c +++ openmp/trunk/runtime/test/tasking/bug_36720.c @@ -0,0 +1,34 @@ +// RUN: %libomp-compile-and-run + +/* +Bugzilla: https://bugs.llvm.org/show_bug.cgi?id=36720 + +Assertion failure at kmp_runtime.cpp(1715): nthreads > 0. +OMP: Error #13: Assertion failure at kmp_runtime.cpp(1715). + +The assertion fails even with OMP_NUM_THREADS=1. If the second task is removed, +everything runs to completion. If the "omp parallel for" directives are removed +from inside the tasks, once again everything runs fine. +*/ + +#define N 1024 + +int main() { + #pragma omp task + { + #pragma omp parallel for + for (int i = 0; i < N; i++) + (void)0; + } + + #pragma omp task + { + #pragma omp parallel for + for (int i = 0; i < N; ++i) + (void)0; + } + + #pragma omp taskwait + + return 0; +}