[Openmp-commits] [llvm] [openmp] [OpenMP] Add Fortran support routines for dyn_groupprivate (OpenMP 6.1) (PR #211630)

Michael Klemm via Openmp-commits openmp-commits at lists.llvm.org
Sat Oct 3 02:21:00 PDT 2026


================
@@ -551,6 +551,69 @@ FTN_GET_SUBMEMSPACE(omp_memspace_handle_t KMP_DEREF memspace,
 #endif
 }
 
+// Fortran requires a different calling convention for the following
+// dyn_groupprivate access entry points.  Therefore, we need to make sure that
+// we only generate a Fortran mangled version here.  Note: the unmangled,
+// C-style symbol does not provide the right ABI and so non-Linux OSes
+// might require some effort here.
+#if KMP_FTN_ENTRIES != KMP_FTN_PLAIN
+void *FTN_STDCALL FTN_GET_DYN_GPRIVATE_PTR(size_t *offset,
+                                           omp_access_t *access_group) {
+#if KMP_OS_DARWIN || KMP_OS_WASI || defined(KMP_STUB)
+  return NULL;
+#else
+  size_t off = offset ? *offset : 0;
+  omp_access_t ag = access_group ? *access_group : omp_access_cgroup;
+  return omp_get_dyn_gprivate_ptr(off, ag);
+#endif
+}
+
+void *FTN_STDCALL FTN_GET_DYN_GPRIVATE_NOFB_PTR(size_t *offset,
+                                                omp_access_t *access_group) {
+#if KMP_OS_DARWIN || KMP_OS_WASI || defined(KMP_STUB)
+  return NULL;
+#else
+  size_t off = offset ? *offset : 0;
+  omp_access_t ag = access_group ? *access_group : omp_access_cgroup;
+  return omp_get_dyn_gprivate_nofb_ptr(off, ag);
+#endif
+}
+
+size_t FTN_STDCALL FTN_GET_DYN_GPRIVATE_SIZE(omp_access_t *access_group) {
+#if KMP_OS_DARWIN || KMP_OS_WASI || defined(KMP_STUB)
+  return 0;
+#else
+  omp_access_t ag = access_group ? *access_group : omp_access_cgroup;
+  return omp_get_dyn_gprivate_size(ag);
+#endif
+}
+
+omp_memspace_handle_t FTN_STDCALL
+FTN_GET_DYN_GPRIVATE_MEMSPACE(omp_access_t *access_group) {
+#if KMP_OS_DARWIN || KMP_OS_WASI || defined(KMP_STUB)
+  return omp_null_mem_space;
+#else
+  omp_access_t ag = access_group ? *access_group : omp_access_cgroup;
+  return omp_get_dyn_gprivate_memspace(ag);
+#endif
+}
+
+size_t FTN_STDCALL FTN_GET_GPRIVATE_LIMIT(int *device_num,
+                                          omp_access_t *access_group) {
+#if KMP_OS_DARWIN || KMP_OS_WASI || defined(KMP_STUB)
+  return 0;
+#else
+  size_t (*fptr)(int, omp_access_t);
+  if ((*(void **)(&fptr) = KMP_DLSYM_NEXT("omp_get_gprivate_limit"))) {
+    int dev = device_num ? *device_num : 0;
+    omp_access_t ag = access_group ? *access_group : omp_access_cgroup;
+    return (*fptr)(dev, ag);
----------------
mjklemm wrote:

Same as before.  This is a matter of ABI and Copilot treats this wrongly.

https://github.com/llvm/llvm-project/pull/211630


More information about the Openmp-commits mailing list