| From 618668540e263c09b0eb28131dde7b4500158fd4 Mon Sep 17 00:00:00 2001 |
| From: Martin Jansa <Martin.Jansa@gmail.com> |
| Date: Sun, 16 Sep 2018 12:39:22 +0000 |
| Subject: [PATCH] sysdeps/ieee754/soft-fp: ignore maybe-uninitialized with -O |
| [BZ #19444] |
| |
| * with -O, -O1, -Os it fails with: |
| |
| In file included from ../soft-fp/soft-fp.h:318, |
| from ../sysdeps/ieee754/soft-fp/s_fdiv.c:28: |
| ../sysdeps/ieee754/soft-fp/s_fdiv.c: In function '__fdiv': |
| ../soft-fp/op-2.h:98:25: error: 'R_f1' may be used uninitialized in this function [-Werror=maybe-uninitialized] |
| X##_f0 = (X##_f1 << (_FP_W_TYPE_SIZE - (N)) | X##_f0 >> (N) \ |
| ^~ |
| ../sysdeps/ieee754/soft-fp/s_fdiv.c:38:14: note: 'R_f1' was declared here |
| FP_DECL_D (R); |
| ^ |
| ../soft-fp/op-2.h:37:36: note: in definition of macro '_FP_FRAC_DECL_2' |
| _FP_W_TYPE X##_f0 _FP_ZERO_INIT, X##_f1 _FP_ZERO_INIT |
| ^ |
| ../soft-fp/double.h:95:24: note: in expansion of macro '_FP_DECL' |
| # define FP_DECL_D(X) _FP_DECL (2, X) |
| ^~~~~~~~ |
| ../sysdeps/ieee754/soft-fp/s_fdiv.c:38:3: note: in expansion of macro 'FP_DECL_D' |
| FP_DECL_D (R); |
| ^~~~~~~~~ |
| ../soft-fp/op-2.h:101:17: error: 'R_f0' may be used uninitialized in this function [-Werror=maybe-uninitialized] |
| : (X##_f0 << (_FP_W_TYPE_SIZE - (N))) != 0)); \ |
| ^~ |
| ../sysdeps/ieee754/soft-fp/s_fdiv.c:38:14: note: 'R_f0' was declared here |
| FP_DECL_D (R); |
| ^ |
| ../soft-fp/op-2.h:37:14: note: in definition of macro '_FP_FRAC_DECL_2' |
| _FP_W_TYPE X##_f0 _FP_ZERO_INIT, X##_f1 _FP_ZERO_INIT |
| ^ |
| ../soft-fp/double.h:95:24: note: in expansion of macro '_FP_DECL' |
| # define FP_DECL_D(X) _FP_DECL (2, X) |
| ^~~~~~~~ |
| ../sysdeps/ieee754/soft-fp/s_fdiv.c:38:3: note: in expansion of macro 'FP_DECL_D' |
| FP_DECL_D (R); |
| ^~~~~~~~~ |
| |
| Build tested with Yocto for ARM, AARCH64, X86, X86_64, PPC, MIPS, MIPS64 |
| with -O, -O1, -Os. |
| For AARCH64 it needs one more fix in locale for -Os. |
| |
| Partial fix for [BZ #23716] |
| * sysdeps/ieee754/soft-fp/s_fdiv.c: Fix build with -O |
| |
| Work around the issue instead of removing -O like we do with |
| SELECTED_OPTIMIZATION |
| |
| Upstream-Status: Submitted [https://www.sourceware.org/ml/libc-alpha/2018-09/msg00300.html] |
| |
| Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com> |
| --- |
| ChangeLog | 4 ++++ |
| sysdeps/ieee754/soft-fp/s_fdiv.c | 12 ++++++++++++ |
| 2 files changed, 16 insertions(+) |
| |
| diff --git a/ChangeLog b/ChangeLog |
| index 922e916f2c..216336edc9 100644 |
| --- a/ChangeLog |
| +++ b/ChangeLog |
| @@ -1,3 +1,7 @@ |
| +2018-09-30 Martin Jansa <Martin.Jansa@gmail.com> |
| + Partial fix for [BZ #23716] |
| + * sysdeps/ieee754/soft-fp/s_fdiv.c: Fix build with -O. |
| + |
| 2018-09-29 Martin Jansa <Martin.Jansa@gmail.com> |
| Partial fix for [BZ #23716] |
| * sysdeps/ieee754/dbl-96/e_jnl.c: Fix build with -O |
| diff --git a/sysdeps/ieee754/soft-fp/s_fdiv.c b/sysdeps/ieee754/soft-fp/s_fdiv.c |
| index 341339f5ed..14655b77da 100644 |
| --- a/sysdeps/ieee754/soft-fp/s_fdiv.c |
| +++ b/sysdeps/ieee754/soft-fp/s_fdiv.c |
| @@ -25,6 +25,16 @@ |
| #undef fdivl |
| |
| #include <math-narrow.h> |
| + |
| +#include <libc-diag.h> |
| +/* R_f[01] are not set in cases where it is not used in packing, but the |
| + compiler does not see that it is set in all cases where it is |
| + used, resulting in warnings that it may be used uninitialized. |
| + The location of the warning differs in different versions of GCC, |
| + it may be where R is defined using a macro or it may be where the |
| + macro is defined. */ |
| +DIAG_PUSH_NEEDS_COMMENT; |
| +DIAG_IGNORE_NEEDS_COMMENT (8, "-Wmaybe-uninitialized"); |
| #include <soft-fp.h> |
| #include <single.h> |
| #include <double.h> |
| @@ -53,4 +63,6 @@ __fdiv (double x, double y) |
| CHECK_NARROW_DIV (ret, x, y); |
| return ret; |
| } |
| +DIAG_POP_NEEDS_COMMENT; |
| + |
| libm_alias_float_double (div) |