[flang] Fix Darwin build after 4762c6557d15 (#84478)

Select POSIX 2008 standard to avoid including Darwin extensions.
Otherwise, Darwin's math.h header defines HUGE, which conflicts
with Flang's HUGE function.

This started happening after 4762c6557d15 (#82443), that added the
"utility" include, which seems to include "math.h".

GitOrigin-RevId: 3149c934cb2602691de40d2aeb238675e8831d57
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 21617ae..71141e5 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -413,6 +413,14 @@
 
 endif()
 
+# Clang on Darwin enables non-POSIX extensions by default, which allows the
+# macro HUGE to leak out of <math.h> even when it is never directly included,
+# conflicting with Flang's HUGE symbols.
+# Set _POSIX_C_SOURCE to avoid including these extensions.
+if (APPLE)
+  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_POSIX_C_SOURCE=200809")
+endif()
+
 list(REMOVE_DUPLICATES CMAKE_CXX_FLAGS)
 
 # Determine HOST_LINK_VERSION on Darwin.
diff --git a/include/flang/Evaluate/integer.h b/include/flang/Evaluate/integer.h
index 2fce4be..977d35c 100644
--- a/include/flang/Evaluate/integer.h
+++ b/include/flang/Evaluate/integer.h
@@ -27,10 +27,6 @@
 #include <string>
 #include <type_traits>
 
-// Some environments, viz. clang on Darwin, allow the macro HUGE
-// to leak out of <math.h> even when it is never directly included.
-#undef HUGE
-
 namespace Fortran::evaluate::value {
 
 // Implements an integer as an assembly of smaller host integer parts
diff --git a/include/flang/Evaluate/real.h b/include/flang/Evaluate/real.h
index 62c99ce..5266bd0 100644
--- a/include/flang/Evaluate/real.h
+++ b/include/flang/Evaluate/real.h
@@ -18,10 +18,6 @@
 #include <limits>
 #include <string>
 
-// Some environments, viz. clang on Darwin, allow the macro HUGE
-// to leak out of <math.h> even when it is never directly included.
-#undef HUGE
-
 namespace llvm {
 class raw_ostream;
 }
diff --git a/lib/Evaluate/fold-implementation.h b/lib/Evaluate/fold-implementation.h
index 798bc5f..6b3c941 100644
--- a/lib/Evaluate/fold-implementation.h
+++ b/lib/Evaluate/fold-implementation.h
@@ -39,10 +39,6 @@
 #include <type_traits>
 #include <variant>
 
-// Some environments, viz. clang on Darwin, allow the macro HUGE
-// to leak out of <math.h> even when it is never directly included.
-#undef HUGE
-
 namespace Fortran::evaluate {
 
 // Utilities
diff --git a/lib/Evaluate/intrinsics-library.cpp b/lib/Evaluate/intrinsics-library.cpp
index e68c5ed..7315a7a 100644
--- a/lib/Evaluate/intrinsics-library.cpp
+++ b/lib/Evaluate/intrinsics-library.cpp
@@ -299,8 +299,8 @@
 /// Define libm extensions
 /// Bessel functions are defined in POSIX.1-2001.
 
-// Remove float bessel functions for AIX as they are not supported
-#ifndef _AIX
+// Remove float bessel functions for AIX and Darwin as they are not supported
+#if !defined(_AIX) && !defined(__APPLE__)
 template <> struct HostRuntimeLibrary<float, LibraryVersion::LibmExtensions> {
   using F = FuncPointer<float, float>;
   using FN = FuncPointer<float, int, float>;