provide CMPLX macros in implementation-internal libm.h
authorRich Felker <dalias@aerifal.cx>
Wed, 17 Dec 2014 21:08:50 +0000 (16:08 -0500)
committerRich Felker <dalias@aerifal.cx>
Wed, 17 Dec 2014 21:08:50 +0000 (16:08 -0500)
this avoids assuming the presence of C11 macro definitions in the
public complex.h, which need changes potentially incompatible with the
way these macros are being used internally.

src/internal/libm.h

index ebcd784..88a7eb4 100644 (file)
@@ -128,6 +128,18 @@ do {                                              \
   (d) = __u.f;                                    \
 } while (0)
 
+#undef __CMPLX
+#undef CMPLX
+#undef CMPLXF
+#undef CMPLXL
+
+#define __CMPLX(x, y, t) \
+       ((union { _Complex t __z; t __xy[2]; }){.__xy = {(x),(y)}}.__z)
+
+#define CMPLX(x, y) __CMPLX(x, y, double)
+#define CMPLXF(x, y) __CMPLX(x, y, float)
+#define CMPLXL(x, y) __CMPLX(x, y, long double)
+
 /* fdlibm kernel functions */
 
 int    __rem_pio2_large(double*,double*,int,int,int);