[OpenMP][libomp] Fix macOS 12 library destruction
authorJonathan Peyton <jonathan.l.peyton@intel.com>
Mon, 12 Dec 2022 17:33:52 +0000 (11:33 -0600)
committerJonathan Peyton <jonathan.l.peyton@intel.com>
Tue, 17 Jan 2023 04:42:18 +0000 (22:42 -0600)
When building the library with icc and using it on macOS 12,
the library destruction process is skipped which has many OMPT tests
failing for macOS 12. This change registers the
__kmp_internal_end_library() call for atexit() which will be a
harmless, redundant call for macOS 11 and below and the only destructor
called for macOS 12+.

Differential Revision: https://reviews.llvm.org/D139857

openmp/runtime/src/kmp_runtime.cpp

index e70393a..6022dca 100644 (file)
@@ -7242,10 +7242,12 @@ static void __kmp_do_serial_initialize(void) {
   __kmp_register_atfork();
 #endif
 
-#if !KMP_DYNAMIC_LIB
+#if !KMP_DYNAMIC_LIB ||                                                        \
+    ((KMP_COMPILER_ICC || KMP_COMPILER_ICX) && KMP_OS_DARWIN)
   {
     /* Invoke the exit handler when the program finishes, only for static
-       library. For dynamic library, we already have _fini and DllMain. */
+       library and macOS* dynamic. For other dynamic libraries, we already
+       have _fini and DllMain. */
     int rc = atexit(__kmp_internal_end_atexit);
     if (rc != 0) {
       __kmp_fatal(KMP_MSG(FunctionError, "atexit()"), KMP_ERR(rc),