libstc++-v3 vs. c99 vendor headers
Robert Lipe
robertl@sco.com
Wed Dec 6 19:31:00 GMT 2000
These two don't seem to play nicely together for me. ccos.c does this:
#include <math.h>
#include "mathconf.h"
__complex__ double
ccos (__complex__ double x)
{
__complex__ double res;
if (!FINITE_P (__real__ x) || __imag__ x != __imag__ x)
{
if (__real__ x == 0.0 || __imag__ x == 0.0)
{
__real__ res = NAN;
When this is built with a vendor headers that knows about C99's nan,
the result isn't pretty. I'm guessing that __real__ is actually a GCC
__real__ while NAN could be just any old NAN. For my C99-aware headers,
this preprocesses down to:
if (__real__ x == 0.0 || __imag__ x == 0.0)
{
__real__ res = ((float) +(const union
{
long double __x;
unsigned char __c[sizeof (long double)];}
)
{ .__c = { [8] = 0xff, 0xff} } .__x);
__imag__ res = 0.0;
Which, of course, isn't legal becuase it mixes the vendor compiler's
concept of a NAN with the GCC desires for a NAN. (How exactly this
works with our compiler is a mystery to me, but it does. This is why
I'm not a compiler guy. :-)
Should that just be renamed to something outside of the C99 namespace?
RJL
More information about the Gcc-bugs
mailing list