Source-Changes-HG archive

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

[src/netbsd-7]: src/external/gpl3/gcc/dist/libstdc++-v3/include/std Pull up f...



details:   https://anonhg.NetBSD.org/src/rev/e7d95cbaba7c
branches:  netbsd-7
changeset: 800496:e7d95cbaba7c
user:      martin <martin%NetBSD.org@localhost>
date:      Sat Jun 23 10:43:57 2018 +0000

description:
Pull up following revision(s) (requested by maya in ticket #1617):

        external/gpl3/gcc/dist/libstdc++-v3/include/std/complex: revision 1.2

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 93cae28a0ffa -r e7d95cbaba7c external/gpl3/gcc/dist/libstdc++-v3/include/std/complex
--- a/external/gpl3/gcc/dist/libstdc++-v3/include/std/complex   Thu Jun 14 19:44:56 2018 +0000
+++ b/external/gpl3/gcc/dist/libstdc++-v3/include/std/complex   Sat Jun 23 10:43:57 2018 +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