[flang-commits] [flang] [flang] fix flang builds with clang 20 after #100692 (PR #106718)
via flang-commits
flang-commits at lists.llvm.org
Fri Aug 30 05:28:17 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-flang-semantics
Author: None (jeanPerier)
<details>
<summary>Changes</summary>
#<!-- -->100692 changes clang template deduction, and an error was now emitted when building flang with top of the tree clang when mapping std::pow in intrinsics-library.cpp for constant folding `error: address of overloaded function 'pow' is ambiguous`
See https://lab.llvm.org/buildbot/#/builders/4/builds/1670
I I am not expert enough to understand if the new error is justified or not here, but it is easy to help the compiler here with explicit wrappers to fix the builds.
---
Full diff: https://github.com/llvm/llvm-project/pull/106718.diff
1 Files Affected:
- (modified) flang/lib/Evaluate/intrinsics-library.cpp (+22-3)
``````````diff
diff --git a/flang/lib/Evaluate/intrinsics-library.cpp b/flang/lib/Evaluate/intrinsics-library.cpp
index 65636b9956e780..ed28d8130808fa 100644
--- a/flang/lib/Evaluate/intrinsics-library.cpp
+++ b/flang/lib/Evaluate/intrinsics-library.cpp
@@ -255,6 +255,25 @@ struct HostRuntimeLibrary<HostT, LibraryVersion::Libm> {
static constexpr HostRuntimeMap map{table};
static_assert(map.Verify(), "map must be sorted");
};
+
+// Helpers to map complex std::pow whose resolution in F2{std::pow} is
+// ambiguous as of clang++ 20.
+template <typename HostT>
+static std::complex<HostT> StdPowF2(
+ const std::complex<HostT> &x, const std::complex<HostT> &y) {
+ return std::pow(x, y);
+}
+template <typename HostT>
+static std::complex<HostT> StdPowF2A(
+ const HostT &x, const std::complex<HostT> &y) {
+ return std::pow(x, y);
+}
+template <typename HostT>
+static std::complex<HostT> StdPowF2B(
+ const std::complex<HostT> &x, const HostT &y) {
+ return std::pow(x, y);
+}
+
template <typename HostT>
struct HostRuntimeLibrary<std::complex<HostT>, LibraryVersion::Libm> {
using F = FuncPointer<std::complex<HostT>, const std::complex<HostT> &>;
@@ -275,9 +294,9 @@ struct HostRuntimeLibrary<std::complex<HostT>, LibraryVersion::Libm> {
FolderFactory<F, F{std::cosh}>::Create("cosh"),
FolderFactory<F, F{std::exp}>::Create("exp"),
FolderFactory<F, F{std::log}>::Create("log"),
- FolderFactory<F2, F2{std::pow}>::Create("pow"),
- FolderFactory<F2A, F2A{std::pow}>::Create("pow"),
- FolderFactory<F2B, F2B{std::pow}>::Create("pow"),
+ FolderFactory<F2, F2{StdPowF2}>::Create("pow"),
+ FolderFactory<F2A, F2A{StdPowF2A}>::Create("pow"),
+ FolderFactory<F2B, F2B{StdPowF2B}>::Create("pow"),
FolderFactory<F, F{std::sin}>::Create("sin"),
FolderFactory<F, F{std::sinh}>::Create("sinh"),
FolderFactory<F, F{std::sqrt}>::Create("sqrt"),
``````````
</details>
https://github.com/llvm/llvm-project/pull/106718
More information about the flang-commits
mailing list