diff --git a/ChangeLog b/ChangeLog index 42e167e18e..dc0dc43a2c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2018-03-05 Joseph Myers + + * iconv/loop.c (UNICODE_TAG_HANDLER): Disable + -Wmaybe-uninitialized for -Os. + * sysdeps/s390/multiarch/8bit-generic.c (BODY): Add comment about + this disabling. + 2018-03-03 Adhemerval Zanella * bits/dirent.h (__INO_T_MATCHES_INO64_T): Define regardless whether diff --git a/iconv/loop.c b/iconv/loop.c index 25609f13db..d571b593c7 100644 --- a/iconv/loop.c +++ b/iconv/loop.c @@ -254,6 +254,16 @@ } +/* With GCC 7 when compiling with -Os for 32-bit s390 the compiler + warns that the variable 'ch', in the definition of BODY in + sysdeps/s390/multiarch/8bit-generic.c, may be used uninitialized in + the call to UNICODE_TAG_HANDLER in that macro. This variable is + actually always initialized before use, in the prior loop if INDEX + is nonzero and in the following 'if' if INDEX is zero. That code + has a comment referencing this diagnostic disabling; updates in one + place may require updates in the other. */ +DIAG_PUSH_NEEDS_COMMENT; +DIAG_IGNORE_Os_NEEDS_COMMENT (7, "-Wmaybe-uninitialized"); /* Handling of Unicode 3.1 TAG characters. Unicode recommends "If language codes are not relevant to the particular processing operation, then they should be ignored." This macro is usually @@ -267,6 +277,7 @@ continue; \ } \ } +DIAG_POP_NEEDS_COMMENT; /* The function returns the status, as defined in gconv.h. */ diff --git a/sysdeps/s390/multiarch/8bit-generic.c b/sysdeps/s390/multiarch/8bit-generic.c index 8d44cd883e..d608beaa62 100644 --- a/sysdeps/s390/multiarch/8bit-generic.c +++ b/sysdeps/s390/multiarch/8bit-generic.c @@ -358,6 +358,10 @@ } \ } \ \ + /* iconv/loop.c disables -Wmaybe-uninitialized for a false \ + positive warning in this code with -Os and has a \ + comment referencing this code accordingly. Updates in \ + one place may require updates in the other. */ \ UNICODE_TAG_HANDLER (ch, 4); \ \ /* This is an illegal character. */ \