[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