* [PATCH] PR c/36750: Suppress missing field initializer warning for '= {0}'
@ 2011-04-21 17:29 Alexander Monakov
2011-04-21 20:43 ` Joseph S. Myers
0 siblings, 1 reply; 2+ messages in thread
From: Alexander Monakov @ 2011-04-21 17:29 UTC (permalink / raw)
To: gcc-patches
Hello,
This patch suppresses the "missing field initializer" warning when a structure
is initialized with ` = { 0 }' in C. Even though the PR author asks
specifically to suppress (at least) only when a trailing comma is included,
results from Google code search suggest that spelling without a comma is more
common, so the patch does not distinguish these variants. Behavior of C++
front-end is unchanged.
Bootstrapped and regtested on x86_64-linux, OK for trunk?
2011-04-21 Alexander Monakov <amonakov@ispras.ru>
PR c/36750
* c-typeck.c (pop_init_level): Do not warn about initializing
with ` = {0}'.
testsuite:
* gcc.dg/missing-field-init-2.c: Update testcase.
diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c
index 15b7755..d8609d2 100644
--- a/gcc/c-typeck.c
+++ b/gcc/c-typeck.c
@@ -6934,15 +6934,23 @@ pop_init_level (int implicit, struct obstack * braced_init_obstack)
&& TREE_CODE (constructor_type) == RECORD_TYPE
&& constructor_unfilled_fields)
{
+ bool constructor_zeroinit =
+ (VEC_length (constructor_elt, constructor_elements) == 1
+ && integer_zerop
+ (VEC_index (constructor_elt, constructor_elements, 0)->value));
+
/* Do not warn for flexible array members or zero-length arrays. */
while (constructor_unfilled_fields
&& (!DECL_SIZE (constructor_unfilled_fields)
|| integer_zerop (DECL_SIZE (constructor_unfilled_fields))))
constructor_unfilled_fields = DECL_CHAIN (constructor_unfilled_fields);
- /* Do not warn if this level of the initializer uses member
- designators; it is likely to be deliberate. */
- if (constructor_unfilled_fields && !constructor_designated)
+ if (constructor_unfilled_fields
+ /* Do not warn if this level of the initializer uses member
+ designators; it is likely to be deliberate. */
+ && !constructor_designated
+ /* Do not warn about initializing with ` = {0}'. */
+ && !constructor_zeroinit)
{
push_member_name (constructor_unfilled_fields);
warning_init (OPT_Wmissing_field_initializers,
diff --git a/gcc/testsuite/gcc.dg/missing-field-init-2.c b/gcc/testsuite/gcc.dg/missing-field-init-2.c
index 581eb30..c5a3f49 100644
--- a/gcc/testsuite/gcc.dg/missing-field-init-2.c
+++ b/gcc/testsuite/gcc.dg/missing-field-init-2.c
@@ -9,3 +9,6 @@ struct s s4[] = { 1, 2, 3, 4, 5 }; /* { dg-warning "(missing initializer)|(near
struct s s5[] = { 1, 2, 3, 4, 5, 6 };
/* Designated initializers produce no warning. */
struct s s6 = { .a = 1 }; /* { dg-bogus "missing initializer" } */
+/* Allow zero-initializing with "= { 0 }". */
+struct s s7 = { 0 }; /* { dg-bogus "missing initializer" } */
+struct s s8 = { 1 }; /* { dg-warning "(missing initializer)|(near initialization)" } */
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH] PR c/36750: Suppress missing field initializer warning for '= {0}'
2011-04-21 17:29 [PATCH] PR c/36750: Suppress missing field initializer warning for '= {0}' Alexander Monakov
@ 2011-04-21 20:43 ` Joseph S. Myers
0 siblings, 0 replies; 2+ messages in thread
From: Joseph S. Myers @ 2011-04-21 20:43 UTC (permalink / raw)
To: Alexander Monakov; +Cc: gcc-patches
On Thu, 21 Apr 2011, Alexander Monakov wrote:
> Hello,
>
> This patch suppresses the "missing field initializer" warning when a structure
> is initialized with ` = { 0 }' in C. Even though the PR author asks
> specifically to suppress (at least) only when a trailing comma is included,
> results from Google code search suggest that spelling without a comma is more
> common, so the patch does not distinguish these variants. Behavior of C++
> front-end is unchanged.
>
> Bootstrapped and regtested on x86_64-linux, OK for trunk?
OK.
--
Joseph S. Myers
joseph@codesourcery.com
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2011-04-21 20:28 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-04-21 17:29 [PATCH] PR c/36750: Suppress missing field initializer warning for '= {0}' Alexander Monakov
2011-04-21 20:43 ` Joseph S. Myers
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).