[flang-commits] [flang] [flang] Fix Darwin build after 4762c6557d15 (PR #84478)
via flang-commits
flang-commits at lists.llvm.org
Fri Mar 8 11:15:19 PST 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-flang-semantics
Author: Leandro Lupori (luporl)
<details>
<summary>Changes</summary>
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 is a temporary build fix. More permanent solutions would be to
rename Flang's HUGE or to define _POSIX_C_SOURCE for Flang as a
whole.
This started happening after 4762c6557d15 (#<!-- -->82443), that added the
"utility" include, which seems to include "math.h".
---
Full diff: https://github.com/llvm/llvm-project/pull/84478.diff
5 Files Affected:
- (modified) flang/CMakeLists.txt (+8)
- (modified) flang/include/flang/Evaluate/integer.h (-4)
- (modified) flang/include/flang/Evaluate/real.h (-4)
- (modified) flang/lib/Evaluate/fold-implementation.h (-4)
- (modified) flang/lib/Evaluate/intrinsics-library.cpp (+2-2)
``````````diff
diff --git a/flang/CMakeLists.txt b/flang/CMakeLists.txt
index 21617aeea0215e..71141e5efac488 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 <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/flang/include/flang/Evaluate/integer.h b/flang/include/flang/Evaluate/integer.h
index 2fce4bedfaee0f..977d35c7eecf48 100644
--- a/flang/include/flang/Evaluate/integer.h
+++ b/flang/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/flang/include/flang/Evaluate/real.h b/flang/include/flang/Evaluate/real.h
index 62c99cebc31684..5266bd0ef64bfd 100644
--- a/flang/include/flang/Evaluate/real.h
+++ b/flang/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/flang/lib/Evaluate/fold-implementation.h b/flang/lib/Evaluate/fold-implementation.h
index 798bc5f37f6f42..6b3c9416724cb6 100644
--- a/flang/lib/Evaluate/fold-implementation.h
+++ b/flang/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/flang/lib/Evaluate/intrinsics-library.cpp b/flang/lib/Evaluate/intrinsics-library.cpp
index e68c5ed3f6a8b1..7315a7a057b102 100644
--- a/flang/lib/Evaluate/intrinsics-library.cpp
+++ b/flang/lib/Evaluate/intrinsics-library.cpp
@@ -299,8 +299,8 @@ struct HostRuntimeLibrary<std::complex<HostT>, 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<float, LibraryVersion::LibmExtensions> {
using F = FuncPointer<float, float>;
using FN = FuncPointer<float, int, float>;
``````````
</details>
https://github.com/llvm/llvm-project/pull/84478
More information about the flang-commits
mailing list