Hi, > Note that "will ever set errno" includes possibly setting it in the > future, since code may be built with one libm version and used with > another. So it wouldn't be correct to have a "never sets errno" attribute > on glibc logb / lround / llround / lrint / llrint / fma / remquo (missing > errno setting is a known bug).
If these functions should set errno, there are many issues both in GCC and GLIBC. GCC treats fma and remquo always as const/pure, so inlines fma always even with -fmath-errno. GLIBC targets which support fma as a single instruction always inline it as a single instruction, as expected. GCC incorrectly treats many other math functions as const/pure, for example GCC "knows" that the C89 sin function will never set errno with -fmath-errno: #include <math.h> #include <errno.h> int res; double f(double x) { errno = 0; double y = sin (x); res = errno; return y; } So if anything this is good evidence that nobody is using errno in actual applications, otherwise these bugs would have been found many years ago. Wilco