[llvm] [flang-rt] Set _POSIX_C_SOURCE on Darwin (PR #160130)

Leandro Lupori via llvm-commits llvm-commits at lists.llvm.org
Mon Sep 22 08:32:14 PDT 2025


https://github.com/luporl created https://github.com/llvm/llvm-project/pull/160130

Clang on Darwin enables non-POSIX extensions by default.
This causes some macros to leak, such as HUGE from <math.h>, which
causes some conflicts with Flang symbols (but not with Flang-RT, for
now).

It also causes some Flang-RT extensions to be disabled, such as FDATE,
that checks for _POSIX_C_SOURCE. Setting _POSIX_C_SOURCE avoids these
issues. This is already being done in Flang, but it was not ported to
Flang-RT.

This also fixes check-flang-rt on Darwin, as NoArgv.FdateNotSupported
is broken since the flang runtime was moved to flang-rt.

Fixes #82036


>From 2439243e477a826a1cd5d9112e4ae0cb37b1baca Mon Sep 17 00:00:00 2001
From: Leandro Lupori <leandro.lupori at linaro.org>
Date: Mon, 22 Sep 2025 11:26:20 -0300
Subject: [PATCH] [flang-rt] Set _POSIX_C_SOURCE on Darwin

Clang on Darwin enables non-POSIX extensions by default.
This causes some macros to leak, such as HUGE from <math.h>, which
causes some conflicts with Flang symbols (but not with Flang-RT, for
now).

It also causes some Flang-RT extensions to be disabled, such as FDATE,
that checks for _POSIX_C_SOURCE. Setting _POSIX_C_SOURCE avoids these
issues. This is already being done in Flang, but it was not ported to
Flang-RT.

This also fixes check-flang-rt on Darwin, as NoArgv.FdateNotSupported
is broken since the flang runtime was moved to flang-rt.

Fixes #82036
---
 flang-rt/cmake/modules/AddFlangRT.cmake | 9 ++++++++-
 flang-rt/unittests/CMakeLists.txt       | 9 +++++++++
 2 files changed, 17 insertions(+), 1 deletion(-)

diff --git a/flang-rt/cmake/modules/AddFlangRT.cmake b/flang-rt/cmake/modules/AddFlangRT.cmake
index 43b1451d65e32..ab383bcbe2cdf 100644
--- a/flang-rt/cmake/modules/AddFlangRT.cmake
+++ b/flang-rt/cmake/modules/AddFlangRT.cmake
@@ -251,8 +251,15 @@ function (add_flangrt_library name)
           $<$<COMPILE_LANGUAGE:CXX>:-nogpulib -flto -fvisibility=hidden -Wno-unknown-cuda-version --cuda-feature=+ptx63>
         )
     elseif (APPLE)
+      # Clang on Darwin enables non-POSIX extensions by default.
+      # This causes some macros to leak, such as HUGE from <math.h>, which
+      # causes some conflicts with Flang symbols (but not with Flang-RT, for
+      # now).
+      # It also causes some Flang-RT extensions to be disabled, such as fdate,
+      # that checks for _POSIX_C_SOURCE.
+      # Setting _POSIX_C_SOURCE avoids these issues.
       target_compile_options(${tgtname} PRIVATE
-          $<$<COMPILE_LANGUAGE:CXX>:${DARWIN_osx_BUILTIN_MIN_VER_FLAG}>
+          $<$<COMPILE_LANGUAGE:CXX>:${DARWIN_osx_BUILTIN_MIN_VER_FLAG} -D_POSIX_C_SOURCE=200809>
         )
     endif ()
 
diff --git a/flang-rt/unittests/CMakeLists.txt b/flang-rt/unittests/CMakeLists.txt
index fd63ad11dcf43..53cd54dfd215e 100644
--- a/flang-rt/unittests/CMakeLists.txt
+++ b/flang-rt/unittests/CMakeLists.txt
@@ -78,6 +78,15 @@ function(add_flangrt_dependent_libs target)
         instead falls back to builtins from Compiler-RT. Linking with ${tgtname}
         may result in a linker error.")
     endif ()
+  elseif (APPLE)
+    # Clang on Darwin enables non-POSIX extensions by default.
+    # This causes some macros to leak, such as HUGE from <math.h>, which
+    # causes some conflicts with Flang symbols (but not with Flang-RT, for
+    # now).
+    # It also causes some Flang-RT extensions to be disabled, such as fdate,
+    # that checks for _POSIX_C_SOURCE.
+    # Setting _POSIX_C_SOURCE avoids these issues.
+    target_compile_options(${target} PRIVATE "-D_POSIX_C_SOURCE=200809")
   endif ()
 endfunction()
 



More information about the llvm-commits mailing list