Fix another -Os strcoll build issue.

While there are now clean -Os build and test results on x86_64 (given
my patch <https://sourceware.org/ml/libc-alpha/2018-02/msg00602.html>,
pending review), testing with -Os with build-many-glibcs.py shows the
build is still failing with -Os everywhere except for x86_64, x86 and
s390x.

There are a variety of different build failures, but the most common
seem to be in strcoll / wcscoll, similar to existing such cases where
DIAG_* are used to disable -Wmaybe-uninitialized.  There are various
different failures even within those functions.  This patch fixes one
particular case that seems quite common, where the warning appears at
the declarations of seq1 and seq2.

Tested with build-many-glibcs.py that this fixes the -Os build for
aarch64-linux-gnu with GCC 7.

	* string/strcoll_l.c: Include <libc-diag.h>.
	(STRCOLL): Ignore -Wmaybe-uninitialized for -Os around
	declarations of seq1 and seq2.
This commit is contained in:
Joseph Myers 2018-02-26 18:38:01 +00:00
parent 20602c72fa
commit f54d8f735a
2 changed files with 15 additions and 0 deletions

View file

@ -1,5 +1,9 @@
2018-02-26 Joseph Myers <joseph@codesourcery.com>
* string/strcoll_l.c: Include <libc-diag.h>.
(STRCOLL): Ignore -Wmaybe-uninitialized for -Os around
declarations of seq1 and seq2.
[BZ #15105]
* stdlib/atoi.c (atoi): Use libc_hidden_def.
* include/stdlib.h [!_ISOMAC] (atoi): Use libc_hidden_proto.

View file

@ -24,6 +24,7 @@
#include <stdint.h>
#include <string.h>
#include <sys/param.h>
#include <libc-diag.h>
#ifndef STRING_TYPE
# define STRING_TYPE char
@ -291,7 +292,17 @@ STRCOLL (const STRING_TYPE *s1, const STRING_TYPE *s2, locale_t l)
int result = 0, rule = 0;
/* With GCC 7 when compiling with -Os the compiler warns that
seq1.back_us and seq2.back_us might be used uninitialized.
Sometimes this warning appears at locations in locale/weightwc.h
where the actual use is, but on architectures other than x86_64,
x86 and s390x, a warning appears at the definitions of seq1 and
seq2. This uninitialized use is impossible for the same reason
as described in comments in locale/weightwc.h. */
DIAG_PUSH_NEEDS_COMMENT;
DIAG_IGNORE_Os_NEEDS_COMMENT (7, "-Wmaybe-uninitialized");
coll_seq seq1, seq2;
DIAG_POP_NEEDS_COMMENT;
seq1.len = 0;
seq1.idxmax = 0;
seq1.rule = 0;