On 27/04/11 21:31, Pádraig Brady wrote:
> On 27/04/11 21:14, Jim Meyering wrote:
>> Pádraig Brady wrote:
>>> I'll apply the attached after the pending release.
>>>
>>> Subject: [PATCH] maint: enable -Wmissing-field-initializers
>>>
>>> * configure.ac: Enable -Wmissing-field-initializers for src/
>>> but leave disabled for lib/.
>>> * src/system.h: Enable the static variable hack only for
>>> non gcc compilers and versions of gcc older than 4.7.
>>> Starting with that version, the warning is no longer issued for
>>> variables initialized with a single zero value.
>>> Rename DECLARE_ZEROED_AGGREGATE to the more concise
>>> and accurate DECLARE_ZEROED_AUTO.
>>> * src/ls.c: Use the renamed macro.
>>> * src/pathchk.c: Likewise.
>>> * src/shred.c: Likewise.
>>> * src/stty.c: Likewise.
>>> * src/wc.c: Likewise.
>>
>> Nice. You beat me to it.
>> Thanks.
>
> I was thinking actually of changing this, and doing this solely within
> manywarnings.m4 in gnulib. I.E. apply -Wno-missing-field-initializers
> conditionally there (depending on result of compiling {0,}).
>
> Then we could remove all this stuff from coreutils,
> including the DECLARE_ZEROED_AGGREGATE macro.
>
>
Now that this gnulib change is included
http://git.sv.gnu.org/gitweb/?p=gnulib.git;a=commitdiff;h=2953da14
I'll apply the attached.
This will both enable the warning on GCC >= 4.7 and
remove the warkarounds from the code.
cheers,
Pádraig.
>From 1f13f7d3eb8987bec0a878c0715c48626c98884c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?P=C3=A1draig=20Brady?= <[email protected]>
Date: Tue, 26 Apr 2011 10:30:05 +0100
Subject: [PATCH] maint: remove -Wmissing-field-initializers workarounds
* configure.ac: Rather than disabling -Wmissing-field-initializers,
use the fact that gnulib now disables it automatically when required
(on versions of GCC older than 4.7).
* src/system.h: Remove the no longer needed DECLARE_ZEROED_AGGREGATE.
* src/ls.c: Likewise.
* src/pathchk.c: Likewise.
* src/shred.c: Likewise.
* src/stty.c: Likewise.
* src/wc.c: Likewise.
---
configure.ac | 1 -
src/ls.c | 2 +-
src/pathchk.c | 2 +-
src/shred.c | 2 +-
src/stty.c | 4 ++--
src/system.h | 13 -------------
src/wc.c | 2 +-
7 files changed, 6 insertions(+), 20 deletions(-)
diff --git a/configure.ac b/configure.ac
index 6407bea..c8bd9e3 100644
--- a/configure.ac
+++ b/configure.ac
@@ -96,7 +96,6 @@ if test "$gl_gcc_warnings" = yes; then
for w in $ws; do
gl_WARN_ADD([$w])
done
- gl_WARN_ADD([-Wno-missing-field-initializers]) # We need this one
gl_WARN_ADD([-Wno-sign-compare]) # Too many warnings for now
gl_WARN_ADD([-Wno-unused-parameter]) # Too many warnings for now
diff --git a/src/ls.c b/src/ls.c
index a7ea8c2..4262923 100644
--- a/src/ls.c
+++ b/src/ls.c
@@ -3891,7 +3891,7 @@ quote_name (FILE *out, const char *name, struct quoting_options const *options,
reach its end, replacing each non-printable multibyte
character with a single question mark. */
{
- DECLARE_ZEROED_AGGREGATE (mbstate_t, mbstate);
+ mbstate_t mbstate = { 0, };
do
{
wchar_t wc;
diff --git a/src/pathchk.c b/src/pathchk.c
index f0f99dd..7f4e5df 100644
--- a/src/pathchk.c
+++ b/src/pathchk.c
@@ -196,7 +196,7 @@ portable_chars_only (char const *file, size_t filelen)
if (*invalid)
{
- DECLARE_ZEROED_AGGREGATE (mbstate_t, mbstate);
+ mbstate_t mbstate = { 0, };
size_t charlen = mbrlen (invalid, filelen - validlen, &mbstate);
error (0, 0,
_("nonportable character %s in file name %s"),
diff --git a/src/shred.c b/src/shred.c
index 10425a3..2774791 100644
--- a/src/shred.c
+++ b/src/shred.c
@@ -1098,7 +1098,7 @@ int
main (int argc, char **argv)
{
bool ok = true;
- DECLARE_ZEROED_AGGREGATE (struct Options, flags);
+ struct Options flags = { 0, };
char **file;
int n_files;
int c;
diff --git a/src/stty.c b/src/stty.c
index 674a19a..6d54ece 100644
--- a/src/stty.c
+++ b/src/stty.c
@@ -730,7 +730,7 @@ main (int argc, char **argv)
{
/* Initialize to all zeroes so there is no risk memcmp will report a
spurious difference in an uninitialized portion of the structure. */
- DECLARE_ZEROED_AGGREGATE (struct termios, mode);
+ struct termios mode = { 0, };
enum output_type output_type;
int optc;
@@ -1003,7 +1003,7 @@ main (int argc, char **argv)
{
/* Initialize to all zeroes so there is no risk memcmp will report a
spurious difference in an uninitialized portion of the structure. */
- DECLARE_ZEROED_AGGREGATE (struct termios, new_mode);
+ struct termios new_mode = { 0, };
if (tcsetattr (STDIN_FILENO, TCSADRAIN, &mode))
error (EXIT_FAILURE, errno, "%s", device_name);
diff --git a/src/system.h b/src/system.h
index 1c351bd..2e8e177 100644
--- a/src/system.h
+++ b/src/system.h
@@ -467,19 +467,6 @@ enum
# define IF_LINT(Code) /* empty */
#endif
-/* With -Dlint, avoid warnings from gcc about code like mbstate_t m = {0,};
- by wasting space on a static variable of the same type, that is thus
- guaranteed to be initialized to 0, and use that on the RHS. */
-#define DZA_CONCAT0(x,y) x ## y
-#define DZA_CONCAT(x,y) DZA_CONCAT0 (x, y)
-#ifdef lint
-# define DECLARE_ZEROED_AGGREGATE(Type, Var) \
- static Type DZA_CONCAT (s0_, __LINE__); Type Var = DZA_CONCAT (s0_, __LINE__)
-#else
-# define DECLARE_ZEROED_AGGREGATE(Type, Var) \
- Type Var = { 0, }
-#endif
-
#ifndef __attribute__
# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8)
# define __attribute__(x) /* empty */
diff --git a/src/wc.c b/src/wc.c
index 0399214..702a7a77 100644
--- a/src/wc.c
+++ b/src/wc.c
@@ -285,7 +285,7 @@ wc (int fd, char const *file_x, struct fstatus *fstatus)
{
bool in_word = false;
uintmax_t linepos = 0;
- DECLARE_ZEROED_AGGREGATE (mbstate_t, state);
+ mbstate_t state = { 0, };
bool in_shift = false;
# if SUPPORT_OLD_MBRTOWC
/* Back-up the state before each multibyte character conversion and
--
1.7.4