mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-02-02 22:10:17 +08:00
re PR c/13282 (A "-Wno..." switch to turn off "missing initializer" warnings)
PR c/13282 * c.opt (Wmissing-field-initializers): New option. * c-opts.c (c_common_post_options): Make -Wextra turn it on by default. * c-typeck.c (pop_init_level): Guard the missing field warning with warn_missing_field_initializers rather than extra_warnings. * doc/invoke.texi (-Wmissing-field-initializers): Document, moving some of the explanation from... (-Wextra): ...here. Say that the missing field warning can be seperately controlled by -Wmissing-field-initializers. cp/ * typeck2.c (process_init_constructor): Guard the missing field warning with warn_missing_field_initializers rather than extra_warnings. testsuite/ * gcc.dg/missing-field-init-[12].c: New tests. * g++.dg/warn/missing-field-init-[12].C: New tests. From-SVN: r85638
This commit is contained in:
parent
155cb61615
commit
eaac467945
@ -1,3 +1,15 @@
|
||||
2004-08-06 Richard Sandiford <rsandifo@redhat.com>
|
||||
|
||||
PR c/13282
|
||||
* c.opt (Wmissing-field-initializers): New option.
|
||||
* c-opts.c (c_common_post_options): Make -Wextra turn it on by default.
|
||||
* c-typeck.c (pop_init_level): Guard the missing field warning with
|
||||
warn_missing_field_initializers rather than extra_warnings.
|
||||
* doc/invoke.texi (-Wmissing-field-initializers): Document, moving
|
||||
some of the explanation from...
|
||||
(-Wextra): ...here. Say that the missing field warning can be
|
||||
seperately controlled by -Wmissing-field-initializers.
|
||||
|
||||
2004-08-06 Paolo Bonzini <bonzini@gnu.org>
|
||||
|
||||
* expr.c (expand_expr_real_1) <ENTRY_VALUE_EXPR>: Remove.
|
||||
|
@ -958,10 +958,12 @@ c_common_post_options (const char **pfilename)
|
||||
if (flag_objc_exceptions && !flag_objc_sjlj_exceptions)
|
||||
flag_exceptions = 1;
|
||||
|
||||
/* -Wextra implies -Wsign-compare, but not if explicitly
|
||||
overridden. */
|
||||
/* -Wextra implies -Wsign-compare and -Wmissing-field-initializers,
|
||||
but not if explicitly overridden. */
|
||||
if (warn_sign_compare == -1)
|
||||
warn_sign_compare = extra_warnings;
|
||||
if (warn_missing_field_initializers == -1)
|
||||
warn_missing_field_initializers = extra_warnings;
|
||||
|
||||
/* Special format checking options don't work without -Wformat; warn if
|
||||
they are used. */
|
||||
|
@ -4763,7 +4763,7 @@ pop_init_level (int implicit)
|
||||
}
|
||||
|
||||
/* Warn when some struct elements are implicitly initialized to zero. */
|
||||
if (extra_warnings
|
||||
if (warn_missing_field_initializers
|
||||
&& constructor_type
|
||||
&& TREE_CODE (constructor_type) == RECORD_TYPE
|
||||
&& constructor_unfilled_fields)
|
||||
|
@ -294,6 +294,10 @@ Wmissing-declarations
|
||||
C ObjC Var(warn_missing_declarations)
|
||||
Warn about global functions without previous declarations
|
||||
|
||||
Wmissing-field-initializers
|
||||
C ObjC C++ ObjC++ Var(warn_missing_field_initializers) Init(-1)
|
||||
Warn about missing fields in struct initializers
|
||||
|
||||
Wmissing-format-attribute
|
||||
C ObjC C++ ObjC++ Var(warn_missing_format_attribute)
|
||||
Warn about functions which might be candidates for format attributes
|
||||
|
@ -1,3 +1,8 @@
|
||||
2004-08-06 Richard Sandiford <rsandifo@redhat.com>
|
||||
|
||||
* typeck2.c (process_init_constructor): Guard the missing field warning
|
||||
with warn_missing_field_initializers rather than extra_warnings.
|
||||
|
||||
2004-08-06 Paolo Bonzini <bonzini@gnu.org>
|
||||
|
||||
* class.c (instantiate_type) <ENTRY_VALUE_EXPR>: Do not handle.
|
||||
|
@ -1022,7 +1022,7 @@ process_init_constructor (tree type, tree init, tree* elts)
|
||||
next1 = digest_init (TREE_TYPE (field), next1, 0);
|
||||
|
||||
/* Warn when some struct elements are implicitly initialized. */
|
||||
if (extra_warnings
|
||||
if (warn_missing_field_initializers
|
||||
&& (!init || BRACE_ENCLOSED_INITIALIZER_P (init)))
|
||||
warning ("missing initializer for member `%D'", field);
|
||||
}
|
||||
@ -1038,7 +1038,7 @@ process_init_constructor (tree type, tree init, tree* elts)
|
||||
|
||||
/* Warn when some struct elements are implicitly initialized
|
||||
to zero. */
|
||||
if (extra_warnings
|
||||
if (warn_missing_field_initializers
|
||||
&& (!init || BRACE_ENCLOSED_INITIALIZER_P (init)))
|
||||
warning ("missing initializer for member `%D'", field);
|
||||
|
||||
|
@ -222,7 +222,7 @@ in the following sections.
|
||||
-Wimport -Wno-import -Winit-self -Winline @gol
|
||||
-Wno-invalid-offsetof -Winvalid-pch @gol
|
||||
-Wlarger-than-@var{len} -Wlong-long @gol
|
||||
-Wmain -Wmissing-braces @gol
|
||||
-Wmain -Wmissing-braces -Wmissing-field-initializers @gol
|
||||
-Wmissing-format-attribute -Wmissing-include-dirs @gol
|
||||
-Wmissing-noreturn @gol
|
||||
-Wno-multichar -Wnonnull -Wpacked -Wpadded @gol
|
||||
@ -2612,13 +2612,8 @@ incorrect result when the signed value is converted to unsigned.
|
||||
|
||||
@item
|
||||
An aggregate has an initializer which does not initialize all members.
|
||||
For example, the following code would cause such a warning, because
|
||||
@code{x.h} would be implicitly initialized to zero:
|
||||
|
||||
@smallexample
|
||||
struct s @{ int f, g, h; @};
|
||||
struct s x = @{ 3, 4 @};
|
||||
@end smallexample
|
||||
This warning can be independently controlled by
|
||||
@option{-Wmissing-field-initializers}.
|
||||
|
||||
@item
|
||||
A function parameter is declared without a type specifier in K&R-style
|
||||
@ -2902,6 +2897,30 @@ Do so even if the definition itself provides a prototype.
|
||||
Use this option to detect global functions that are not declared in
|
||||
header files.
|
||||
|
||||
@item -Wmissing-field-initializers
|
||||
@opindex Wmissing-field-initializers
|
||||
@opindex W
|
||||
@opindex Wextra
|
||||
Warn if a structure's initializer has some fields missing. For
|
||||
example, the following code would cause such a warning, because
|
||||
@code{x.h} is implicitly zero:
|
||||
|
||||
@smallexample
|
||||
struct s @{ int f, g, h; @};
|
||||
struct s x = @{ 3, 4 @};
|
||||
@end smallexample
|
||||
|
||||
This option does not warn about designated initializers, so the following
|
||||
modification would not trigger a warning:
|
||||
|
||||
@smallexample
|
||||
struct s @{ int f, g, h; @};
|
||||
struct s x = @{ .f = 3, .g = 4 @};
|
||||
@end smallexample
|
||||
|
||||
This warning is included in @option{-Wextra}. To get other @option{-Wextra}
|
||||
warnings without this one, use @samp{-Wextra -Wno-missing-field-initializers}.
|
||||
|
||||
@item -Wmissing-noreturn
|
||||
@opindex Wmissing-noreturn
|
||||
Warn about functions which might be candidates for attribute @code{noreturn}.
|
||||
|
@ -1,3 +1,8 @@
|
||||
2004-08-06 Richard Sandiford <rsandifo@redhat.com>
|
||||
|
||||
* gcc.dg/missing-field-init-[12].c: New tests.
|
||||
* g++.dg/warn/missing-field-init-[12].C: New tests.
|
||||
|
||||
2004-08-06 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
* gcc.dg/enum2.c: New test.
|
||||
|
9
gcc/testsuite/g++.dg/warn/missing-field-init-1.C
Normal file
9
gcc/testsuite/g++.dg/warn/missing-field-init-1.C
Normal file
@ -0,0 +1,9 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-Wextra -Wno-missing-field-initializers" } */
|
||||
|
||||
struct s { int a, b, c; };
|
||||
struct s s1 = { 1, 2, 3 };
|
||||
struct s s2 = { 1, 2 }; /* { dg-bogus "missing initializer" } */
|
||||
struct s s3[] = { { 1, 2 }, { 4, 5 } }; /* { dg-bogus "missing initializer" } */
|
||||
struct s s4[] = { 1, 2, 3, 4, 5 }; /* { dg-bogus "missing initializer" } */
|
||||
struct s s5[] = { 1, 2, 3, 4, 5, 6 };
|
9
gcc/testsuite/g++.dg/warn/missing-field-init-2.C
Normal file
9
gcc/testsuite/g++.dg/warn/missing-field-init-2.C
Normal file
@ -0,0 +1,9 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-Wmissing-field-initializers" } */
|
||||
|
||||
struct s { int a, b, c; };
|
||||
struct s s1 = { 1, 2, 3 };
|
||||
struct s s2 = { 1, 2 }; /* { dg-warning "(missing initializer)|(near initialization)" } */
|
||||
struct s s3[] = { { 1, 2 }, { 4, 5 } }; /* { dg-warning "(missing initializer)|(near initialization)" } */
|
||||
struct s s4[] = { 1, 2, 3, 4, 5 }; /* { dg-warning "(missing initializer)|(near initialization)" } */
|
||||
struct s s5[] = { 1, 2, 3, 4, 5, 6 };
|
10
gcc/testsuite/gcc.dg/missing-field-init-1.c
Normal file
10
gcc/testsuite/gcc.dg/missing-field-init-1.c
Normal file
@ -0,0 +1,10 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-Wextra -Wno-missing-field-initializers -std=c99" } */
|
||||
|
||||
struct s { int a, b, c; };
|
||||
struct s s1 = { 1, 2, 3 };
|
||||
struct s s2 = { 1, 2 }; /* { dg-bogus "missing initializer" } */
|
||||
struct s s3[] = { { 1, 2 }, { 4, 5 } }; /* { dg-bogus "missing initializer" } */
|
||||
struct s s4[] = { 1, 2, 3, 4, 5 }; /* { dg-bogus "missing initializer" } */
|
||||
struct s s5[] = { 1, 2, 3, 4, 5, 6 };
|
||||
struct s s6 = { .a = 1 }; /* { dg-bogus "missing initializer" } */
|
11
gcc/testsuite/gcc.dg/missing-field-init-2.c
Normal file
11
gcc/testsuite/gcc.dg/missing-field-init-2.c
Normal file
@ -0,0 +1,11 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-Wmissing-field-initializers -std=c99" } */
|
||||
|
||||
struct s { int a, b, c; };
|
||||
struct s s1 = { 1, 2, 3 };
|
||||
struct s s2 = { 1, 2 }; /* { dg-warning "(missing initializer)|(near initialization)" } */
|
||||
struct s s3[] = { { 1, 2 }, { 4, 5 } }; /* { dg-warning "(missing initializer)|(near initialization)" } */
|
||||
struct s s4[] = { 1, 2, 3, 4, 5 }; /* { dg-warning "(missing initializer)|(near initialization)" } */
|
||||
struct s s5[] = { 1, 2, 3, 4, 5, 6 };
|
||||
/* Designated initializers produce no warning. */
|
||||
struct s s6 = { .a = 1 }; /* { dg-bogus "missing initializer" } */
|
Loading…
Reference in New Issue
Block a user