diff --git a/flang/CMakeLists.txt b/flang/CMakeLists.txt index 21617aeea0215..71141e5efac48 100644 --- a/flang/CMakeLists.txt +++ b/flang/CMakeLists.txt @@ -413,6 +413,14 @@ if (LLVM_COMPILER_IS_GCC_COMPATIBLE) endif() +# Clang on Darwin enables non-POSIX extensions by default, which allows the +# macro HUGE to leak out of 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/flang/include/flang/Evaluate/integer.h b/flang/include/flang/Evaluate/integer.h index 2fce4bedfaee0..977d35c7eecf4 100644 --- a/flang/include/flang/Evaluate/integer.h +++ b/flang/include/flang/Evaluate/integer.h @@ -27,10 +27,6 @@ #include #include -// Some environments, viz. clang on Darwin, allow the macro HUGE -// to leak out of 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/flang/include/flang/Evaluate/real.h b/flang/include/flang/Evaluate/real.h index 62c99cebc3168..5266bd0ef64bf 100644 --- a/flang/include/flang/Evaluate/real.h +++ b/flang/include/flang/Evaluate/real.h @@ -18,10 +18,6 @@ #include #include -// Some environments, viz. clang on Darwin, allow the macro HUGE -// to leak out of even when it is never directly included. -#undef HUGE - namespace llvm { class raw_ostream; } diff --git a/flang/lib/Evaluate/fold-implementation.h b/flang/lib/Evaluate/fold-implementation.h index 798bc5f37f6f4..6b3c9416724cb 100644 --- a/flang/lib/Evaluate/fold-implementation.h +++ b/flang/lib/Evaluate/fold-implementation.h @@ -39,10 +39,6 @@ #include #include -// Some environments, viz. clang on Darwin, allow the macro HUGE -// to leak out of even when it is never directly included. -#undef HUGE - namespace Fortran::evaluate { // Utilities diff --git a/flang/lib/Evaluate/intrinsics-library.cpp b/flang/lib/Evaluate/intrinsics-library.cpp index e68c5ed3f6a8b..7315a7a057b10 100644 --- a/flang/lib/Evaluate/intrinsics-library.cpp +++ b/flang/lib/Evaluate/intrinsics-library.cpp @@ -299,8 +299,8 @@ struct HostRuntimeLibrary, LibraryVersion::Libm> { /// 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 { using F = FuncPointer; using FN = FuncPointer;