about summary refs log tree commit diff
path: root/misc/error.h
diff options
context:
space:
mode:
authorGabriel F. T. Gomes <gabriel@inconstante.eti.br>2018-08-08 17:26:22 -0300
committerGabriel F. T. Gomes <gabriel@inconstante.eti.br>2019-03-01 15:26:36 -0300
commitd11086a9391b6066458947b80c0d0059b6b461d8 (patch)
tree91d537afc5f7a3c50c2b0002ec626de9353abc69 /misc/error.h
parent90188e7d1adc5d8743d7933c9ed1bf95f91dda62 (diff)
downloadglibc-d11086a9391b6066458947b80c0d0059b6b461d8.tar.gz
glibc-d11086a9391b6066458947b80c0d0059b6b461d8.tar.xz
glibc-d11086a9391b6066458947b80c0d0059b6b461d8.zip
ldbl-opt: Add error and error_at_line (bug 23984)
On platforms where long double may have the same format as double
(-mlong-double-64), error and error_at_line do not take that into
account and might produce wrong output if a long double conversion is
requested by the format string ('%Lf').  This patch adds compatibility
functions for this situation and redirects calls via header magic.

Tested for powerpc, powerpc64 and powerpc64le.
Diffstat (limited to 'misc/error.h')
-rw-r--r--misc/error.h12
1 files changed, 9 insertions, 3 deletions
diff --git a/misc/error.h b/misc/error.h
index 34d4a6d4c6..ba0c9293ed 100644
--- a/misc/error.h
+++ b/misc/error.h
@@ -47,9 +47,15 @@ extern unsigned int error_message_count;
    variable controls whether this mode is selected or not.  */
 extern int error_one_per_line;
 
-
-#if defined __extern_always_inline && defined __va_arg_pack
-# include <bits/error.h>
+#ifdef __LDBL_COMPAT
+# include <bits/error-ldbl.h>
+#else
+/* Do not inline error and error_at_line when long double has the same
+   size of double, because that would invalidate the redirections to the
+   compatibility functions.  */
+# if defined __extern_always_inline && defined __va_arg_pack
+#  include <bits/error.h>
+# endif
 #endif
 
 __END_DECLS