[PATCH] D156506: [clang][Interp] Check floating results for NaNs
Joshua Cranmer via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Aug 3 12:35:50 PDT 2023
jcranmer-intel added inline comments.
================
Comment at: clang/lib/AST/Interp/Interp.cpp:503
+ // 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.
----------------
tbaeder wrote:
> @jcranmer-intel Doesn't this comment (which I've coped from `ExprConstant.cpp`) contradict what you said about not checking the result?
Immediately following that in the specification is this:
> [Note 3: Treatment of division by zero, forming a remainder using a zero divisor, and all floating-point exceptions varies among machines, and is sometimes adjustable by a library function. — end note]
The current C++ specification is rather clear about its unclarity on floating-point. Also note that IEEE 754 defines floating-point data as consisting of {-inf, ..., -0} union {+0, ..., +inf} union {NaN}. So NaN is arguable to be a well-defined mathematical result, if you consider that floating-point types don't model real numbers but an approximation of real numbers (just as unsigned integers model not integers but integers mod 2^N).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D156506/new/
https://reviews.llvm.org/D156506
More information about the cfe-commits
mailing list