kmp_gsupport: Fix library initialization with taskgroup
authorJonas Hahnfeld <Hahnfeld@itc.rwth-aachen.de>
Mon, 8 Aug 2016 13:23:08 +0000 (13:23 +0000)
committerJonas Hahnfeld <Hahnfeld@itc.rwth-aachen.de>
Mon, 8 Aug 2016 13:23:08 +0000 (13:23 +0000)
Differential Revision: https://reviews.llvm.org/D23259

llvm-svn: 278003

openmp/runtime/src/kmp_gsupport.c
openmp/runtime/test/tasking/bug_serial_taskgroup.c [new file with mode: 0644]

index 23c97d1..62baa2b 100644 (file)
@@ -1259,7 +1259,7 @@ PARALLEL_LOOP(xexpand(KMP_API_NAME_GOMP_PARALLEL_LOOP_RUNTIME), kmp_sch_runtime)
 void
 xexpand(KMP_API_NAME_GOMP_TASKGROUP_START)(void)
 {
-    int gtid = __kmp_get_gtid();
+    int gtid = __kmp_entry_gtid();
     MKLOC(loc, "GOMP_taskgroup_start");
     KA_TRACE(20, ("GOMP_taskgroup_start: T#%d\n", gtid));
 
diff --git a/openmp/runtime/test/tasking/bug_serial_taskgroup.c b/openmp/runtime/test/tasking/bug_serial_taskgroup.c
new file mode 100644 (file)
index 0000000..850bc90
--- /dev/null
@@ -0,0 +1,16 @@
+// RUN: %libomp-compile-and-run
+
+/*
+ GCC failed this test because __kmp_get_gtid() instead of __kmp_entry_gtid()
+ was called in xexpand(KMP_API_NAME_GOMP_TASKGROUP_START)(void).
+ __kmp_entry_gtid() will initialize the runtime if not yet done which does not
+ happen with __kmp_get_gtid().
+ */
+
+int main()
+{
+    #pragma omp taskgroup
+    { }
+
+    return 0;
+}