On Thu, 15 Dec 2022, Kewen.Lin via Gcc-patches wrote: > By investigating the exposed NaN failures, I found it's due to that it wants > to convert _Float128 type constant to long double type constant, it goes > through function real_convert which clears the signalling bit in the context > of !HONOR_SNANS (arg). > > if (r->cl == rvc_nan) > r->signalling = 0; > > The test cases don't have the explicit option -fsignaling-nans, I'm inclined > to believe it's intentional since there is only a sNaN generation. If so, > we don't want this kind of conversion which is useless and can clear > signalling > bit unexpectedly, one shortcut is to just copy the corresponding > REAL_VALUE_TYPE > and rebuild with the given type if the modes are the same.
I think this approach - treating floating-point conversions to a type with the same mode consistently as a copy rather than a convertFormat operation - is reasonable. -- Joseph S. Myers jos...@codesourcery.com