[clang] [C++23] [CLANG] Adding C++23 constexpr math functions: fmin and frexp. (PR #88978)
Zahira Ammarguellat via cfe-commits
cfe-commits at lists.llvm.org
Thu Apr 18 07:49:19 PDT 2024
================
@@ -2922,7 +2922,7 @@ static bool handleFloatFloatBinOp(EvalInfo &Info, const BinaryOperator *E,
// If during the evaluation of an expression, the result is not
// mathematically defined [...], the behavior is undefined.
// FIXME: C++ rules require us to not conform to IEEE 754 here.
- if (LHS.isNaN()) {
+ if (!Info.getLangOpts().CPlusPlus23 && LHS.isNaN()) {
----------------
zahiraam wrote:
Not sure. We land here when the constexpr builtin_* is using a `NAN` argument with a Windows definition which is:
`#define INFINITY ((float)(1e+300 * 1e+300))`
`#define NAN (-(float)(INFINITY * 0.0F))`
and an` EvalMode= EM_ConstantExpression`.
`float f1 = __builtin_fminf(NAN, NAN);` returns an `EvaluateFloat() = true` (`EvalMode= EM_IgnoreSideEffects`)
`constexpr float f1 = __builtin_fminf(NAN, NAN);` returns an `EvaluateFloat() = false` (` EvalMode= EM_ConstantExpression`).
May be this is not the right place to do that? Should `keepEvaluatingAfterUndefinedBehavior` return true for C++23 when `EvalMode= EM_ConstantExpression`?
https://github.com/llvm/llvm-project/pull/88978
More information about the cfe-commits
mailing list