Commit 3176a0c2 by DJ Delorie Committed by DJ Delorie

c-decl.c (pop_scope): Move warning control into warning call.

* c-decl.c (pop_scope): Move warning control into warning call.
(diagnose_mismatched_decls): Likewise.
(pushdecl): Likewise.
(start_decl): Likewise.
(grokparms): Likewise.
(start_function): Likewise.
(store_parm_decls_newstyle): Likewise.
(store_parm_decls_oldstyle): Likewise.
(finish_function): Likewise.
(declspecs_add_scspec): Likewise.
* c-format.c (decode_format_attr): Likewise.
(maybe_read_dollar_number): Likewise.
(avoid_dollar_number): Likewise.
(finish_dollar_format_checking): Likewise.
(check_format_info): Likewise.
(check_format_info_main): Likewise.
(check_format_types): Likewise.
(format_type_warning): Likewise.
* c-typeck.c (function_types_compatible_p): Likewise.
(build_array_ref): Likewise.
(convert_arguments): Likewise.
(build_c_cast): Likewise.
(store_init_value): Likewise.
(process_init_element): Likewise.
(c_start_case): Likewise.
* stor-layout.c (finalize_record_size): Likewise.
* tree-cfg.c (execute_warn_function_noreturn): Likewise.
* tree-inline.c (expand_call_inline): Likewise.

From-SVN: r101384
parent cec471db
2005-06-28 DJ Delorie <dj@redhat.com>
* c-decl.c (pop_scope): Move warning control into warning call.
(diagnose_mismatched_decls): Likewise.
(pushdecl): Likewise.
(start_decl): Likewise.
(grokparms): Likewise.
(start_function): Likewise.
(store_parm_decls_newstyle): Likewise.
(store_parm_decls_oldstyle): Likewise.
(finish_function): Likewise.
(declspecs_add_scspec): Likewise.
* c-format.c (decode_format_attr): Likewise.
(maybe_read_dollar_number): Likewise.
(avoid_dollar_number): Likewise.
(finish_dollar_format_checking): Likewise.
(check_format_info): Likewise.
(check_format_info_main): Likewise.
(check_format_types): Likewise.
(format_type_warning): Likewise.
* c-typeck.c (function_types_compatible_p): Likewise.
(build_array_ref): Likewise.
(convert_arguments): Likewise.
(build_c_cast): Likewise.
(store_init_value): Likewise.
(process_init_element): Likewise.
(c_start_case): Likewise.
* stor-layout.c (finalize_record_size): Likewise.
* tree-cfg.c (execute_warn_function_noreturn): Likewise.
* tree-inline.c (expand_call_inline): Likewise.
2005-06-28 Uros Bizjak <uros@kss-loka.si> 2005-06-28 Uros Bizjak <uros@kss-loka.si>
PR target/22134 PR target/22134
......
...@@ -801,14 +801,13 @@ pop_scope (void) ...@@ -801,14 +801,13 @@ pop_scope (void)
case VAR_DECL: case VAR_DECL:
/* Warnings for unused variables. */ /* Warnings for unused variables. */
if (warn_unused_variable if (!TREE_USED (p)
&& !TREE_USED (p)
&& !DECL_IN_SYSTEM_HEADER (p) && !DECL_IN_SYSTEM_HEADER (p)
&& DECL_NAME (p) && DECL_NAME (p)
&& !DECL_ARTIFICIAL (p) && !DECL_ARTIFICIAL (p)
&& scope != file_scope && scope != file_scope
&& scope != external_scope) && scope != external_scope)
warning (0, "%Junused variable %qD", p, p); warning (OPT_Wunused_variable, "%Junused variable %qD", p, p);
if (b->inner_comp) if (b->inner_comp)
{ {
...@@ -1392,8 +1391,8 @@ diagnose_mismatched_decls (tree newdecl, tree olddecl, ...@@ -1392,8 +1391,8 @@ diagnose_mismatched_decls (tree newdecl, tree olddecl,
} }
else if (warn_traditional) else if (warn_traditional)
{ {
warning (0, "%Jnon-static declaration of %qD follows " warning (OPT_Wtraditional, "%Jnon-static declaration of %qD "
"static declaration", newdecl, newdecl); "follows static declaration", newdecl, newdecl);
warned = true; warned = true;
} }
} }
...@@ -1445,8 +1444,8 @@ diagnose_mismatched_decls (tree newdecl, tree olddecl, ...@@ -1445,8 +1444,8 @@ diagnose_mismatched_decls (tree newdecl, tree olddecl,
} }
else if (warn_traditional) else if (warn_traditional)
{ {
warning (0, "%Jnon-static declaration of %qD follows " warning (OPT_Wtraditional, "%Jnon-static declaration of %qD "
"static declaration", newdecl, newdecl); "follows static declaration", newdecl, newdecl);
warned = true; warned = true;
} }
} }
...@@ -1577,7 +1576,8 @@ diagnose_mismatched_decls (tree newdecl, tree olddecl, ...@@ -1577,7 +1576,8 @@ diagnose_mismatched_decls (tree newdecl, tree olddecl,
&& !(TREE_CODE (newdecl) == PARM_DECL && !(TREE_CODE (newdecl) == PARM_DECL
&& TREE_ASM_WRITTEN (olddecl) && !TREE_ASM_WRITTEN (newdecl))) && TREE_ASM_WRITTEN (olddecl) && !TREE_ASM_WRITTEN (newdecl)))
{ {
warning (0, "%Jredundant redeclaration of %qD", newdecl, newdecl); warning (OPT_Wredundant_decls, "%Jredundant redeclaration of %qD",
newdecl, newdecl);
warned = true; warned = true;
} }
...@@ -2121,10 +2121,9 @@ pushdecl (tree x) ...@@ -2121,10 +2121,9 @@ pushdecl (tree x)
visdecl = b->decl; visdecl = b->decl;
vistype = TREE_TYPE (visdecl); vistype = TREE_TYPE (visdecl);
} }
if (warn_nested_externs if (scope != file_scope
&& scope != file_scope
&& !DECL_IN_SYSTEM_HEADER (x)) && !DECL_IN_SYSTEM_HEADER (x))
warning (0, "nested extern declaration of %qD", x); warning (OPT_Wnested_externs, "nested extern declaration of %qD", x);
while (b && !B_IN_EXTERNAL_SCOPE (b)) while (b && !B_IN_EXTERNAL_SCOPE (b))
{ {
...@@ -3102,7 +3101,7 @@ start_decl (struct c_declarator *declarator, struct c_declspecs *declspecs, ...@@ -3102,7 +3101,7 @@ start_decl (struct c_declarator *declarator, struct c_declspecs *declspecs,
if (warn_main > 0 && TREE_CODE (decl) != FUNCTION_DECL if (warn_main > 0 && TREE_CODE (decl) != FUNCTION_DECL
&& MAIN_NAME_P (DECL_NAME (decl))) && MAIN_NAME_P (DECL_NAME (decl)))
warning (0, "%J%qD is usually a function", decl, decl); warning (OPT_Wmain, "%J%qD is usually a function", decl, decl);
if (initialized) if (initialized)
/* Is it valid for this decl to have an initializer at all? /* Is it valid for this decl to have an initializer at all?
...@@ -4742,9 +4741,9 @@ grokparms (struct c_arg_info *arg_info, bool funcdef_flag) ...@@ -4742,9 +4741,9 @@ grokparms (struct c_arg_info *arg_info, bool funcdef_flag)
{ {
tree arg_types = arg_info->types; tree arg_types = arg_info->types;
if (warn_strict_prototypes && arg_types == 0 && !funcdef_flag if (arg_types == 0 && !funcdef_flag && !in_system_header)
&& !in_system_header) warning (OPT_Wstrict_prototypes,
warning (0, "function declaration isn%'t a prototype"); "function declaration isn%'t a prototype");
if (arg_types == error_mark_node) if (arg_types == error_mark_node)
return 0; /* don't set TYPE_ARG_TYPES in this case */ return 0; /* don't set TYPE_ARG_TYPES in this case */
...@@ -5893,14 +5892,16 @@ start_function (struct c_declspecs *declspecs, struct c_declarator *declarator, ...@@ -5893,14 +5892,16 @@ start_function (struct c_declspecs *declspecs, struct c_declarator *declarator,
&& old_decl != error_mark_node && old_decl != error_mark_node
&& TYPE_ARG_TYPES (TREE_TYPE (decl1)) == 0 && TYPE_ARG_TYPES (TREE_TYPE (decl1)) == 0
&& C_DECL_ISNT_PROTOTYPE (old_decl)) && C_DECL_ISNT_PROTOTYPE (old_decl))
warning (0, "function declaration isn%'t a prototype"); warning (OPT_Wstrict_prototypes,
"function declaration isn%'t a prototype");
/* Optionally warn of any global def with no previous prototype. */ /* Optionally warn of any global def with no previous prototype. */
else if (warn_missing_prototypes else if (warn_missing_prototypes
&& old_decl != error_mark_node && old_decl != error_mark_node
&& TREE_PUBLIC (decl1) && TREE_PUBLIC (decl1)
&& !MAIN_NAME_P (DECL_NAME (decl1)) && !MAIN_NAME_P (DECL_NAME (decl1))
&& C_DECL_ISNT_PROTOTYPE (old_decl)) && C_DECL_ISNT_PROTOTYPE (old_decl))
warning (0, "%Jno previous prototype for %qD", decl1, decl1); warning (OPT_Wmissing_prototypes, "%Jno previous prototype for %qD",
decl1, decl1);
/* Optionally warn of any def with no previous prototype /* Optionally warn of any def with no previous prototype
if the function has already been used. */ if the function has already been used. */
else if (warn_missing_prototypes else if (warn_missing_prototypes
...@@ -5908,14 +5909,16 @@ start_function (struct c_declspecs *declspecs, struct c_declarator *declarator, ...@@ -5908,14 +5909,16 @@ start_function (struct c_declspecs *declspecs, struct c_declarator *declarator,
&& old_decl != error_mark_node && old_decl != error_mark_node
&& TREE_USED (old_decl) && TREE_USED (old_decl)
&& TYPE_ARG_TYPES (TREE_TYPE (old_decl)) == 0) && TYPE_ARG_TYPES (TREE_TYPE (old_decl)) == 0)
warning (0, "%J%qD was used with no prototype before its definition", warning (OPT_Wmissing_prototypes,
"%J%qD was used with no prototype before its definition",
decl1, decl1); decl1, decl1);
/* Optionally warn of any global def with no previous declaration. */ /* Optionally warn of any global def with no previous declaration. */
else if (warn_missing_declarations else if (warn_missing_declarations
&& TREE_PUBLIC (decl1) && TREE_PUBLIC (decl1)
&& old_decl == 0 && old_decl == 0
&& !MAIN_NAME_P (DECL_NAME (decl1))) && !MAIN_NAME_P (DECL_NAME (decl1)))
warning (0, "%Jno previous declaration for %qD", decl1, decl1); warning (OPT_Wmissing_declarations, "%Jno previous declaration for %qD",
decl1, decl1);
/* Optionally warn of any def with no previous declaration /* Optionally warn of any def with no previous declaration
if the function has already been used. */ if the function has already been used. */
else if (warn_missing_declarations else if (warn_missing_declarations
...@@ -5923,7 +5926,8 @@ start_function (struct c_declspecs *declspecs, struct c_declarator *declarator, ...@@ -5923,7 +5926,8 @@ start_function (struct c_declspecs *declspecs, struct c_declarator *declarator,
&& old_decl != error_mark_node && old_decl != error_mark_node
&& TREE_USED (old_decl) && TREE_USED (old_decl)
&& C_DECL_IMPLICIT (old_decl)) && C_DECL_IMPLICIT (old_decl))
warning (0, "%J%qD was used with no declaration before its definition", warning (OPT_Wmissing_declarations,
"%J%qD was used with no declaration before its definition",
decl1, decl1); decl1, decl1);
/* This is a definition, not a reference. /* This is a definition, not a reference.
...@@ -6059,9 +6063,10 @@ store_parm_decls_newstyle (tree fndecl, const struct c_arg_info *arg_info) ...@@ -6059,9 +6063,10 @@ store_parm_decls_newstyle (tree fndecl, const struct c_arg_info *arg_info)
warning if we got here because ARG_INFO_TYPES was error_mark_node warning if we got here because ARG_INFO_TYPES was error_mark_node
(this happens when a function definition has just an ellipsis in (this happens when a function definition has just an ellipsis in
its parameter list). */ its parameter list). */
else if (warn_traditional && !in_system_header && !current_function_scope else if (!in_system_header && !current_function_scope
&& arg_info->types != error_mark_node) && arg_info->types != error_mark_node)
warning (0, "%Jtraditional C rejects ISO C style function definitions", warning (OPT_Wtraditional,
"%Jtraditional C rejects ISO C style function definitions",
fndecl); fndecl);
/* Now make all the parameter declarations visible in the function body. /* Now make all the parameter declarations visible in the function body.
...@@ -6163,7 +6168,8 @@ store_parm_decls_oldstyle (tree fndecl, const struct c_arg_info *arg_info) ...@@ -6163,7 +6168,8 @@ store_parm_decls_oldstyle (tree fndecl, const struct c_arg_info *arg_info)
if (flag_isoc99) if (flag_isoc99)
pedwarn ("%Jtype of %qD defaults to %<int%>", decl, decl); pedwarn ("%Jtype of %qD defaults to %<int%>", decl, decl);
else if (extra_warnings) else if (extra_warnings)
warning (0, "%Jtype of %qD defaults to %<int%>", decl, decl); warning (OPT_Wextra, "%Jtype of %qD defaults to %<int%>",
decl, decl);
} }
TREE_PURPOSE (parm) = decl; TREE_PURPOSE (parm) = decl;
...@@ -6518,7 +6524,8 @@ finish_function (void) ...@@ -6518,7 +6524,8 @@ finish_function (void)
inline function, as we might never be compiled separately. */ inline function, as we might never be compiled separately. */
&& DECL_INLINE (fndecl)) && DECL_INLINE (fndecl))
{ {
warning (0, "no return statement in function returning non-void"); warning (OPT_Wreturn_type,
"no return statement in function returning non-void");
TREE_NO_WARNING (fndecl) = 1; TREE_NO_WARNING (fndecl) = 1;
} }
...@@ -6527,7 +6534,7 @@ finish_function (void) ...@@ -6527,7 +6534,7 @@ finish_function (void)
if (extra_warnings if (extra_warnings
&& current_function_returns_value && current_function_returns_value
&& current_function_returns_null) && current_function_returns_null)
warning (0, "this function may return with or without a value"); warning (OPT_Wextra, "this function may return with or without a value");
/* Store the end of the function, so that we get good line number /* Store the end of the function, so that we get good line number
info for the epilogue. */ info for the epilogue. */
...@@ -7265,7 +7272,7 @@ declspecs_add_scspec (struct c_declspecs *specs, tree scspec) ...@@ -7265,7 +7272,7 @@ declspecs_add_scspec (struct c_declspecs *specs, tree scspec)
&& C_IS_RESERVED_WORD (scspec)); && C_IS_RESERVED_WORD (scspec));
i = C_RID_CODE (scspec); i = C_RID_CODE (scspec);
if (extra_warnings && specs->non_sc_seen_p) if (extra_warnings && specs->non_sc_seen_p)
warning (0, "%qE is not at beginning of declaration", scspec); warning (OPT_Wextra, "%qE is not at beginning of declaration", scspec);
switch (i) switch (i)
{ {
case RID_INLINE: case RID_INLINE:
......
...@@ -1064,7 +1064,7 @@ function_types_compatible_p (tree f1, tree f2) ...@@ -1064,7 +1064,7 @@ function_types_compatible_p (tree f1, tree f2)
return 0; return 0;
/* If one of these types comes from a non-prototype fn definition, /* If one of these types comes from a non-prototype fn definition,
compare that with the other type's arglist. compare that with the other type's arglist.
If they don't match, ask for a warning (0, but no error). */ If they don't match, ask for a warning (but no error). */
if (TYPE_ACTUAL_ARG_TYPES (f1) if (TYPE_ACTUAL_ARG_TYPES (f1)
&& 1 != type_lists_compatible_p (args2, TYPE_ACTUAL_ARG_TYPES (f1))) && 1 != type_lists_compatible_p (args2, TYPE_ACTUAL_ARG_TYPES (f1)))
val = 2; val = 2;
...@@ -1721,9 +1721,9 @@ build_array_ref (tree array, tree index) ...@@ -1721,9 +1721,9 @@ build_array_ref (tree array, tree index)
deliberately. ??? Existing practice has also been to warn only deliberately. ??? Existing practice has also been to warn only
when the char index is syntactically the index, not for when the char index is syntactically the index, not for
char[array]. */ char[array]. */
if (warn_char_subscripts && !swapped if (!swapped
&& TYPE_MAIN_VARIANT (TREE_TYPE (index)) == char_type_node) && TYPE_MAIN_VARIANT (TREE_TYPE (index)) == char_type_node)
warning (0, "array subscript has type %<char%>"); warning (OPT_Wchar_subscripts, "array subscript has type %<char%>");
/* Apply default promotions *after* noticing character types. */ /* Apply default promotions *after* noticing character types. */
index = default_conversion (index); index = default_conversion (index);
...@@ -2234,8 +2234,9 @@ convert_arguments (tree typelist, tree values, tree function, tree fundecl) ...@@ -2234,8 +2234,9 @@ convert_arguments (tree typelist, tree values, tree function, tree fundecl)
and the actual arg is that enum type. */ and the actual arg is that enum type. */
; ;
else if (formal_prec != TYPE_PRECISION (type1)) else if (formal_prec != TYPE_PRECISION (type1))
warning (0, "passing argument %d of %qE with different " warning (OPT_Wconversion, "passing argument %d of %qE "
"width due to prototype", argnum, rname); "with different width due to prototype",
argnum, rname);
else if (TYPE_UNSIGNED (type) == TYPE_UNSIGNED (type1)) else if (TYPE_UNSIGNED (type) == TYPE_UNSIGNED (type1))
; ;
/* Don't complain if the formal parameter type /* Don't complain if the formal parameter type
...@@ -2256,11 +2257,12 @@ convert_arguments (tree typelist, tree values, tree function, tree fundecl) ...@@ -2256,11 +2257,12 @@ convert_arguments (tree typelist, tree values, tree function, tree fundecl)
&& TYPE_UNSIGNED (TREE_TYPE (val))) && TYPE_UNSIGNED (TREE_TYPE (val)))
; ;
else if (TYPE_UNSIGNED (type)) else if (TYPE_UNSIGNED (type))
warning (0, "passing argument %d of %qE as unsigned " warning (OPT_Wconversion, "passing argument %d of %qE "
"due to prototype", argnum, rname); "as unsigned due to prototype",
argnum, rname);
else else
warning (0, "passing argument %d of %qE as signed " warning (OPT_Wconversion, "passing argument %d of %qE "
"due to prototype", argnum, rname); "as signed due to prototype", argnum, rname);
} }
} }
...@@ -3249,7 +3251,7 @@ build_c_cast (tree type, tree expr) ...@@ -3249,7 +3251,7 @@ build_c_cast (tree type, tree expr)
} }
/* Warn about possible alignment problems. */ /* Warn about possible alignment problems. */
if (STRICT_ALIGNMENT && warn_cast_align if (STRICT_ALIGNMENT
&& TREE_CODE (type) == POINTER_TYPE && TREE_CODE (type) == POINTER_TYPE
&& TREE_CODE (otype) == POINTER_TYPE && TREE_CODE (otype) == POINTER_TYPE
&& TREE_CODE (TREE_TYPE (otype)) != VOID_TYPE && TREE_CODE (TREE_TYPE (otype)) != VOID_TYPE
...@@ -3260,28 +3262,28 @@ build_c_cast (tree type, tree expr) ...@@ -3260,28 +3262,28 @@ build_c_cast (tree type, tree expr)
|| TREE_CODE (TREE_TYPE (otype)) == RECORD_TYPE) || TREE_CODE (TREE_TYPE (otype)) == RECORD_TYPE)
&& TYPE_MODE (TREE_TYPE (otype)) == VOIDmode) && TYPE_MODE (TREE_TYPE (otype)) == VOIDmode)
&& TYPE_ALIGN (TREE_TYPE (type)) > TYPE_ALIGN (TREE_TYPE (otype))) && TYPE_ALIGN (TREE_TYPE (type)) > TYPE_ALIGN (TREE_TYPE (otype)))
warning (0, "cast increases required alignment of target type"); warning (OPT_Wcast_align,
"cast increases required alignment of target type");
if (warn_pointer_to_int_cast if (TREE_CODE (type) == INTEGER_TYPE
&& TREE_CODE (type) == INTEGER_TYPE
&& TREE_CODE (otype) == POINTER_TYPE && TREE_CODE (otype) == POINTER_TYPE
&& TYPE_PRECISION (type) != TYPE_PRECISION (otype) && TYPE_PRECISION (type) != TYPE_PRECISION (otype)
&& !TREE_CONSTANT (value)) && !TREE_CONSTANT (value))
warning (0, "cast from pointer to integer of different size"); warning (OPT_Wpointer_to_int_cast,
"cast from pointer to integer of different size");
if (warn_bad_function_cast if (TREE_CODE (value) == CALL_EXPR
&& TREE_CODE (value) == CALL_EXPR
&& TREE_CODE (type) != TREE_CODE (otype)) && TREE_CODE (type) != TREE_CODE (otype))
warning (0, "cast from function call of type %qT to non-matching " warning (OPT_Wbad_function_cast, "cast from function call of type %qT "
"type %qT", otype, type); "to non-matching type %qT", otype, type);
if (warn_int_to_pointer_cast if (TREE_CODE (type) == POINTER_TYPE
&& TREE_CODE (type) == POINTER_TYPE
&& TREE_CODE (otype) == INTEGER_TYPE && TREE_CODE (otype) == INTEGER_TYPE
&& TYPE_PRECISION (type) != TYPE_PRECISION (otype) && TYPE_PRECISION (type) != TYPE_PRECISION (otype)
/* Don't warn about converting any constant. */ /* Don't warn about converting any constant. */
&& !TREE_CONSTANT (value)) && !TREE_CONSTANT (value))
warning (0, "cast to pointer from integer of different size"); warning (OPT_Wint_to_pointer_cast, "cast to pointer from integer "
"of different size");
if (flag_strict_aliasing && warn_strict_aliasing if (flag_strict_aliasing && warn_strict_aliasing
&& TREE_CODE (type) == POINTER_TYPE && TREE_CODE (type) == POINTER_TYPE
...@@ -3294,17 +3296,20 @@ build_c_cast (tree type, tree expr) ...@@ -3294,17 +3296,20 @@ build_c_cast (tree type, tree expr)
/* Casting the address of an object to non void pointer. Warn /* Casting the address of an object to non void pointer. Warn
if the cast breaks type based aliasing. */ if the cast breaks type based aliasing. */
if (!COMPLETE_TYPE_P (TREE_TYPE (type))) if (!COMPLETE_TYPE_P (TREE_TYPE (type)))
warning (0, "type-punning to incomplete type might break strict-aliasing rules"); warning (OPT_Wstrict_aliasing, "type-punning to incomplete type "
"might break strict-aliasing rules");
else else
{ {
HOST_WIDE_INT set1 = get_alias_set (TREE_TYPE (TREE_OPERAND (expr, 0))); HOST_WIDE_INT set1 = get_alias_set (TREE_TYPE (TREE_OPERAND (expr, 0)));
HOST_WIDE_INT set2 = get_alias_set (TREE_TYPE (type)); HOST_WIDE_INT set2 = get_alias_set (TREE_TYPE (type));
if (!alias_sets_conflict_p (set1, set2)) if (!alias_sets_conflict_p (set1, set2))
warning (0, "dereferencing type-punned pointer will break strict-aliasing rules"); warning (OPT_Wstrict_aliasing, "dereferencing type-punned "
"pointer will break strict-aliasing rules");
else if (warn_strict_aliasing > 1 else if (warn_strict_aliasing > 1
&& !alias_sets_might_conflict_p (set1, set2)) && !alias_sets_might_conflict_p (set1, set2))
warning (0, "dereferencing type-punned pointer might break strict-aliasing rules"); warning (OPT_Wstrict_aliasing, "dereferencing type-punned "
"pointer might break strict-aliasing rules");
} }
} }
...@@ -3998,9 +4003,10 @@ store_init_value (tree decl, tree init) ...@@ -3998,9 +4003,10 @@ store_init_value (tree decl, tree init)
/* Store the expression if valid; else report error. */ /* Store the expression if valid; else report error. */
if (warn_traditional && !in_system_header if (!in_system_header
&& AGGREGATE_TYPE_P (TREE_TYPE (decl)) && !TREE_STATIC (decl)) && AGGREGATE_TYPE_P (TREE_TYPE (decl)) && !TREE_STATIC (decl))
warning (0, "traditional C rejects automatic aggregate initialization"); warning (OPT_Wtraditional, "traditional C rejects automatic "
"aggregate initialization");
DECL_INITIAL (decl) = value; DECL_INITIAL (decl) = value;
...@@ -6240,10 +6246,11 @@ process_init_element (struct c_expr value) ...@@ -6240,10 +6246,11 @@ process_init_element (struct c_expr value)
again on the assumption that this must be conditional on again on the assumption that this must be conditional on
__STDC__ anyway (and we've already complained about the __STDC__ anyway (and we've already complained about the
member-designator already). */ member-designator already). */
if (warn_traditional && !in_system_header && !constructor_designated if (!in_system_header && !constructor_designated
&& !(value.value && (integer_zerop (value.value) && !(value.value && (integer_zerop (value.value)
|| real_zerop (value.value)))) || real_zerop (value.value))))
warning (0, "traditional C rejects initialization of unions"); warning (OPT_Wtraditional, "traditional C rejects initialization "
"of unions");
/* Accept a string constant to initialize a subarray. */ /* Accept a string constant to initialize a subarray. */
if (value.value != 0 if (value.value != 0
...@@ -6751,11 +6758,11 @@ c_start_case (tree exp) ...@@ -6751,11 +6758,11 @@ c_start_case (tree exp)
{ {
type = TYPE_MAIN_VARIANT (TREE_TYPE (exp)); type = TYPE_MAIN_VARIANT (TREE_TYPE (exp));
if (warn_traditional && !in_system_header if (!in_system_header
&& (type == long_integer_type_node && (type == long_integer_type_node
|| type == long_unsigned_type_node)) || type == long_unsigned_type_node))
warning (0, "%<long%> switch expression not converted to " warning (OPT_Wtraditional, "%<long%> switch expression not "
"%<int%> in ISO C"); "converted to %<int%> in ISO C");
exp = default_conversion (exp); exp = default_conversion (exp);
type = TREE_TYPE (exp); type = TREE_TYPE (exp);
......
...@@ -1266,9 +1266,9 @@ finalize_record_size (record_layout_info rli) ...@@ -1266,9 +1266,9 @@ finalize_record_size (record_layout_info rli)
TYPE_SIZE_UNIT (rli->t) TYPE_SIZE_UNIT (rli->t)
= round_up (unpadded_size_unit, TYPE_ALIGN_UNIT (rli->t)); = round_up (unpadded_size_unit, TYPE_ALIGN_UNIT (rli->t));
if (warn_padded && TREE_CONSTANT (unpadded_size) if (TREE_CONSTANT (unpadded_size)
&& simple_cst_equal (unpadded_size, TYPE_SIZE (rli->t)) == 0) && simple_cst_equal (unpadded_size, TYPE_SIZE (rli->t)) == 0)
warning (0, "padding struct size to alignment boundary"); warning (OPT_Wpadded, "padding struct size to alignment boundary");
if (warn_packed && TREE_CODE (rli->t) == RECORD_TYPE if (warn_packed && TREE_CODE (rli->t) == RECORD_TYPE
&& TYPE_PACKED (rli->t) && ! rli->packed_maybe_necessary && TYPE_PACKED (rli->t) && ! rli->packed_maybe_necessary
...@@ -1298,19 +1298,19 @@ finalize_record_size (record_layout_info rli) ...@@ -1298,19 +1298,19 @@ finalize_record_size (record_layout_info rli)
name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (rli->t))); name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (rli->t)));
if (STRICT_ALIGNMENT) if (STRICT_ALIGNMENT)
warning (OPT_Wattributes, "packed attribute causes inefficient " warning (OPT_Wpacked, "packed attribute causes inefficient "
"alignment for %qs", name); "alignment for %qs", name);
else else
warning (OPT_Wattributes, warning (OPT_Wpacked,
"packed attribute is unnecessary for %qs", name); "packed attribute is unnecessary for %qs", name);
} }
else else
{ {
if (STRICT_ALIGNMENT) if (STRICT_ALIGNMENT)
warning (OPT_Wattributes, warning (OPT_Wpacked,
"packed attribute causes inefficient alignment"); "packed attribute causes inefficient alignment");
else else
warning (OPT_Wattributes, "packed attribute is unnecessary"); warning (OPT_Wpacked, "packed attribute is unnecessary");
} }
} }
} }
......
...@@ -5130,8 +5130,8 @@ execute_warn_function_noreturn (void) ...@@ -5130,8 +5130,8 @@ execute_warn_function_noreturn (void)
&& !TREE_THIS_VOLATILE (cfun->decl) && !TREE_THIS_VOLATILE (cfun->decl)
&& EDGE_COUNT (EXIT_BLOCK_PTR->preds) == 0 && EDGE_COUNT (EXIT_BLOCK_PTR->preds) == 0
&& !lang_hooks.function.missing_noreturn_ok_p (cfun->decl)) && !lang_hooks.function.missing_noreturn_ok_p (cfun->decl))
warning (0, "%Jfunction might be possible candidate for " warning (OPT_Wmissing_noreturn, "%Jfunction might be possible candidate "
"attribute %<noreturn%>", "for attribute %<noreturn%>",
cfun->decl); cfun->decl);
} }
......
...@@ -1973,8 +1973,9 @@ expand_call_inline (basic_block bb, tree stmt, tree *tp, void *data) ...@@ -1973,8 +1973,9 @@ expand_call_inline (basic_block bb, tree stmt, tree *tp, void *data)
/* Avoid warnings during early inline pass. */ /* Avoid warnings during early inline pass. */
&& (!flag_unit_at_a_time || cgraph_global_info_ready)) && (!flag_unit_at_a_time || cgraph_global_info_ready))
{ {
warning (0, "%Jinlining failed in call to %qF: %s", fn, fn, reason); warning (OPT_Winline, "%Jinlining failed in call to %qF: %s",
warning (0, "called from here"); fn, fn, reason);
warning (OPT_Winline, "called from here");
} }
goto egress; goto egress;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment