[libc-commits] [libc] [libc][math] Qualify fdim funtions to constexpr (PR #194137)

Muhammad Bassiouni via libc-commits libc-commits at lists.llvm.org
Sat Apr 25 15:12:00 PDT 2026


================
@@ -52,7 +52,8 @@ add_or_sub(InType x, InType y) {
   if (LIBC_UNLIKELY(x_bits.is_inf_or_nan() || y_bits.is_inf_or_nan() ||
                     x_bits.is_zero() || y_bits.is_zero())) {
     if (x_bits.is_nan() || y_bits.is_nan()) {
-      if (x_bits.is_signaling_nan() || y_bits.is_signaling_nan())
+      if (!cpp::is_constant_evaluated() &&
+          (x_bits.is_signaling_nan() || y_bits.is_signaling_nan()))
         raise_except_if_required(FE_INVALID);
----------------
bassiounix wrote:

Looking at the definition of `raise_except_if_required`
```cc
LIBC_INLINE static constexpr int
raise_except_if_required([[maybe_unused]] int excepts) {
  if (cpp::is_constant_evaluated()) {
    return 0;
  } else {
#ifndef LIBC_MATH_HAS_NO_EXCEPT
    if (math_errhandling & MATH_ERREXCEPT)
      return raise_except(excepts);
#endif // LIBC_MATH_HAS_NO_EXCEPT
    return 0;
  }
}
```
I don't think you need to guard this with `cpp::is_constant_evaluated` because it's already guarded.

```suggestion
      if (x_bits.is_signaling_nan() || y_bits.is_signaling_nan())
        raise_except_if_required(FE_INVALID);
```

https://github.com/llvm/llvm-project/pull/194137


More information about the libc-commits mailing list