This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: Fix -Os strcoll, wcscoll, build (bug 21313)
- From: Adhemerval Zanella <adhemerval dot zanella at linaro dot org>
- To: libc-alpha at sourceware dot org
- Date: Wed, 7 Feb 2018 10:14:44 -0200
- Subject: Re: Fix -Os strcoll, wcscoll, build (bug 21313)
- Authentication-results: sourceware.org; auth=none
- References: <alpine.DEB.2.20.1802012037470.13065@digraph.polyomino.org.uk>
On 01/02/2018 18:38, Joseph Myers wrote:
> The findidx functions used in implementing strcoll / wcscoll already
> use DIAG_IGNORE_Os_NEEDS_COMMENT for spurious -Wmaybe-uninitialized
> warnings that appear with -Os. In building with GCC 7 for x86_64 with
> -Os, I find there are additional such warnings, for the same structure
> elements, which are spurious for the same reasons given in the
> existing comments (and this was also reported for MIPS with GCC 5 in
> bug 21313). This patch adds corresponding uses of DIAG_* in the
> places that get the additional warnings.
>
> Tested for x86_64 with -Os that this eliminates those warnings and so
> allows the build to progress further.
>
> 2018-02-01 Joseph Myers <joseph@codesourcery.com>
>
> [BZ #21313]
> * locale/weight.h (findidx): Disable -Wmaybe-uninitialized for -Os
> in another place.
> * locale/weightwc.h (findidx): Likewise.
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
>
> diff --git a/locale/weight.h b/locale/weight.h
> index e2fdae1..6028d35 100644
> --- a/locale/weight.h
> +++ b/locale/weight.h
> @@ -132,7 +132,15 @@ findidx (const int32_t *table,
> do
> {
> offset <<= 8;
> + /* With GCC 7 when compiling with -Os the compiler
> + warns that seq1.back_us and seq2.back_us, which
> + become usrc, might be used uninitialized. This
> + is impossible for the same reason as described
> + above. */
> + DIAG_PUSH_NEEDS_COMMENT;
> + DIAG_IGNORE_Os_NEEDS_COMMENT (7, "-Wmaybe-uninitialized");
> offset += usrc[cnt] - cp[cnt];
> + DIAG_POP_NEEDS_COMMENT;
> }
> while (++cnt < nhere);
> }
> diff --git a/locale/weightwc.h b/locale/weightwc.h
> index 682d2b4..ac25ba9 100644
> --- a/locale/weightwc.h
> +++ b/locale/weightwc.h
> @@ -90,9 +90,16 @@ findidx (const int32_t *table,
> size_t cnt;
> size_t offset;
>
> + /* With GCC 7 when compiling with -Os the compiler warns
> + that seq1.back_us and seq2.back_us, which become usrc,
> + might be used uninitialized. This is impossible for the
> + same reason as described above. */
> + DIAG_PUSH_NEEDS_COMMENT;
> + DIAG_IGNORE_Os_NEEDS_COMMENT (7, "-Wmaybe-uninitialized");
> for (cnt = 0; cnt < nhere - 1 && cnt < len; ++cnt)
> if (cp[cnt] != usrc[cnt])
> break;
> + DIAG_POP_NEEDS_COMMENT;
>
> if (cnt < nhere - 1)
> {
>