Module Name:    src
Committed By:   christos
Date:           Mon Jan 11 16:49:09 UTC 2016

Modified Files:
        src/external/gpl3/gcc.old/dist/libstdc++-v3/include/std: complex

Log Message:
Hack around the cabs mess, and explain what's going on...


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 \
    src/external/gpl3/gcc.old/dist/libstdc++-v3/include/std/complex

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/external/gpl3/gcc.old/dist/libstdc++-v3/include/std/complex
diff -u src/external/gpl3/gcc.old/dist/libstdc++-v3/include/std/complex:1.3 src/external/gpl3/gcc.old/dist/libstdc++-v3/include/std/complex:1.4
--- src/external/gpl3/gcc.old/dist/libstdc++-v3/include/std/complex:1.3	Tue Sep 22 23:39:29 2015
+++ src/external/gpl3/gcc.old/dist/libstdc++-v3/include/std/complex	Mon Jan 11 11:49:09 2016
@@ -44,6 +44,16 @@
 #include <cmath>
 #include <sstream>
 
+#if _GLIBCXX_USE_C99_COMPLEX
+// This is disgusting; we can't include ccomplex because that c++11
+// and we can't use the builtins because those point to the wrong
+// ABI-wise cabs/cabsf so we manually declare those here and use
+// them directly.
+extern "C" float __c99_cabsf(_Complex float);
+extern "C" double __c99_cabs(_Complex double);
+extern "C" long double __c99_cabsl(_Complex long double);
+#endif
+
 // Get rid of a macro possibly defined in <complex.h>
 #undef complex
 
@@ -580,15 +590,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     }
 
 #if _GLIBCXX_USE_C99_COMPLEX
+  // XXX: We can't use __builtin_cabs* because they are broken
   inline float
-  __complex_abs(__complex__ float __z) { return __builtin_cabsf(__z); }
+  __complex_abs(__complex__ float __z) { return __c99_cabsf(__z); }
 
   inline double
-  __complex_abs(__complex__ double __z) { return __builtin_cabs(__z); }
+  __complex_abs(__complex__ double __z) { return __c99_cabs(__z); }
 
   inline long double
   __complex_abs(const __complex__ long double& __z)
-  { return __builtin_cabsl(__z); }
+  { return __c99_cabsl(__z); }
 
   template<typename _Tp>
     inline _Tp

Reply via email to