diff --git a/flang/lib/Evaluate/intrinsics-library.cpp b/flang/lib/Evaluate/intrinsics-library.cpp index 65636b9956e78..ed28d8130808f 100644 --- a/flang/lib/Evaluate/intrinsics-library.cpp +++ b/flang/lib/Evaluate/intrinsics-library.cpp @@ -255,6 +255,25 @@ struct HostRuntimeLibrary { 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 +static std::complex StdPowF2( + const std::complex &x, const std::complex &y) { + return std::pow(x, y); +} +template +static std::complex StdPowF2A( + const HostT &x, const std::complex &y) { + return std::pow(x, y); +} +template +static std::complex StdPowF2B( + const std::complex &x, const HostT &y) { + return std::pow(x, y); +} + template struct HostRuntimeLibrary, LibraryVersion::Libm> { using F = FuncPointer, const std::complex &>; @@ -275,9 +294,9 @@ struct HostRuntimeLibrary, LibraryVersion::Libm> { FolderFactory::Create("cosh"), FolderFactory::Create("exp"), FolderFactory::Create("log"), - FolderFactory::Create("pow"), - FolderFactory::Create("pow"), - FolderFactory::Create("pow"), + FolderFactory::Create("pow"), + FolderFactory::Create("pow"), + FolderFactory::Create("pow"), FolderFactory::Create("sin"), FolderFactory::Create("sinh"), FolderFactory::Create("sqrt"),