Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/external/gpl3/gcc/dist/libstdc++-v3/include/std PR/50646: Us...



details:   https://anonhg.NetBSD.org/src/rev/f6e15082414a
branches:  trunk
changeset: 813003:f6e15082414a
user:      christos <christos%NetBSD.org@localhost>
date:      Mon Jan 11 16:52:53 2016 +0000

description:
PR/50646: Use the c99 cabs math builtins directly, because cabs and cabsf
have broken ABI's can cabsl does not exist. The correct(?) probably fix is
to change the cabs builtins to point to the c99 variants directly...
XXX: pullup-7 and the same file from the gcc.old tree.

diffstat:

 external/gpl3/gcc/dist/libstdc++-v3/include/std/complex |  17 ++++++++++++++---
 1 files changed, 14 insertions(+), 3 deletions(-)

diffs (40 lines):

diff -r 6ecf9455e269 -r f6e15082414a external/gpl3/gcc/dist/libstdc++-v3/include/std/complex
--- a/external/gpl3/gcc/dist/libstdc++-v3/include/std/complex   Mon Jan 11 16:49:09 2016 +0000
+++ b/external/gpl3/gcc/dist/libstdc++-v3/include/std/complex   Mon Jan 11 16:52:53 2016 +0000
@@ -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 @@
     }
 
 #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



Home | Main Index | Thread Index | Old Index