I have a question about the attributes that GCC is putting on the 
nexttoward/nextafter builtin functions.  This issue started when
ToT glibc ran into a problem when building with ToT GCC after Martin
Sebor added a patch to GCC that tightened up the attribute checking
that GCC does.

The line below no longer compiles cleanly with -Wall -frounding-math 
-fno-math-errno:

extern double nexttoward (double __x, long double __y) __attribute__ 
((__nothrow__ )) __attribute__ ((__const__));


When I look at the GCC sources it appears that the attribute on this function
(and on the other nextoward and nextafter functions) changesbased on the GCC
arguments:

-frounding-math -fno-math-errno: __attribute__ ((__pure__))
-fno-math-errno:                 __attribute__ ((__const__))
-frounding-math:                 __attribute__ ((__const__))
<neither option>:                __attribute__ ((__const__))

I have several questions about this; one is why rounding-math affects
the attribute.  The other is why the function would be pure with
-fno-math-errno but const otherwise.  I would think that the -fno-math-errno
version would be const (stricter than pure) since it is not setting
errno.  Finally, how can I check if -frounding-mode is set in the compiler
or not.  If I want the glibc sources to match the GCC attributes I need
to know if -frounding-math is set but there does not seem to be a way
to do that.  Using -fno-math-errno will set __NO_MATH_ERRNO__ but there
does not seem to be an equivelent macro for -frounding-math.

Steve Ellcey
sell...@cavium.com

Reply via email to