On Fri, 3 May 2024, Richard Biener wrote: > So what I do not necessarily agree with is that we need to preserve > the multiplication with -fsignaling-nans. Do we consider a program doing > > handler() { exit(0); } > > x = sNaN; > ... > sigaction(SIGFPE, ... handler) > x*x; > format_hard_drive(); > > and expecting the program to exit(0) rather than formating the hard-disk > to be expecting something the C standard guarantees? And is it enough > for the program to enable -fsignaling-nans for this? > > If so then the first and foremost bug is that 'x*x' doesn't have > TREE_SIDE_EFFECTS > set and thus we do not preserve it when optimizing __builtin_signbit () of it.
Signaling NaNs don't seem relevant here. "Signal" means "set the exception flag" - and 0 * Inf raises the same "invalid" exception flag as sNaN * sNaN. Changing flow of control on an exception is outside the scope of standard C and requires nonstandard extensions such as feenableexcept. (At present -ftrapping-math covers both kinds of exception handling - the default setting of a flag, and the nonstandard change of flow of control.) -- Joseph S. Myers josmy...@redhat.com