Hi, This documentation change clarifies the effect of -ffinite-math-only. With the current documentation, it is unclear what the presence of NaN and Inf representations means if (arithmetic) operations on such values are unspecified and even classification functions like isnan are unreliable. If the hardware thinks a certain bit pattern is a NaN, but the software assumes a NaN value cannot ever exist, it is questionable whether, from a language viewpoint, a representation for NaNs really exists. Because, a NaN is defined by its behavior. This change also clarifies that isnan(nan) returning false is fine.
This relates to PR84949. * doc/invoke.texi: Clarify the effects of -ffinite-math-only. --- gcc/doc/invoke.texi | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index a37a2ee9c19..9e76ab057a9 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -11619,8 +11619,10 @@ The default is @option{-fno-reciprocal-math}. @item -ffinite-math-only @opindex ffinite-math-only -Allow optimizations for floating-point arithmetic that assume -that arguments and results are not NaNs or +-Infs. +Assume that floating-point types in the language do not have representations for +NaNs and +-Inf. Whether floating-point hardware supports and acts on NaNs and ++-Inf is not affected. The behavior of a program that uses a NaN or +-Inf value +as function argument, macro argument, or operand is undefined. This option is not turned on by any @option{-O} option since it can result in incorrect output for programs that depend on -- ────────────────────────────────────────────────────────────────────────── Dr. Matthias Kretz https://mattkretz.github.io GSI Helmholtz Centre for Heavy Ion Research https://gsi.de std::experimental::simd https://github.com/VcDevel/std-simd ──────────────────────────────────────────────────────────────────────────