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