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:
......
...@@ -194,7 +194,7 @@ decode_format_attr (tree args, function_format_info *info, int validated_p) ...@@ -194,7 +194,7 @@ decode_format_attr (tree args, function_format_info *info, int validated_p)
if (info->format_type == format_type_error) if (info->format_type == format_type_error)
{ {
gcc_assert (!validated_p); gcc_assert (!validated_p);
warning (0, "%qE is an unrecognized format function type", warning (OPT_Wformat, "%qE is an unrecognized format function type",
format_type_id); format_type_id);
return false; return false;
} }
...@@ -925,7 +925,7 @@ maybe_read_dollar_number (const char **format, ...@@ -925,7 +925,7 @@ maybe_read_dollar_number (const char **format,
{ {
if (dollar_needed) if (dollar_needed)
{ {
warning (0, "missing $ operand number in format"); warning (OPT_Wformat, "missing $ operand number in format");
return -1; return -1;
} }
else else
...@@ -946,7 +946,7 @@ maybe_read_dollar_number (const char **format, ...@@ -946,7 +946,7 @@ maybe_read_dollar_number (const char **format,
{ {
if (dollar_needed) if (dollar_needed)
{ {
warning (0, "missing $ operand number in format"); warning (OPT_Wformat, "missing $ operand number in format");
return -1; return -1;
} }
else else
...@@ -955,14 +955,14 @@ maybe_read_dollar_number (const char **format, ...@@ -955,14 +955,14 @@ maybe_read_dollar_number (const char **format,
*format = fcp + 1; *format = fcp + 1;
if (pedantic && !dollar_format_warned) if (pedantic && !dollar_format_warned)
{ {
warning (0, "%s does not support %%n$ operand number formats", warning (OPT_Wformat, "%s does not support %%n$ operand number formats",
C_STD_NAME (STD_EXT)); C_STD_NAME (STD_EXT));
dollar_format_warned = 1; dollar_format_warned = 1;
} }
if (overflow_flag || argnum == 0 if (overflow_flag || argnum == 0
|| (dollar_first_arg_num && argnum > dollar_arguments_count)) || (dollar_first_arg_num && argnum > dollar_arguments_count))
{ {
warning (0, "operand number out of range in format"); warning (OPT_Wformat, "operand number out of range in format");
return -1; return -1;
} }
if (argnum > dollar_max_arg_used) if (argnum > dollar_max_arg_used)
...@@ -985,7 +985,7 @@ maybe_read_dollar_number (const char **format, ...@@ -985,7 +985,7 @@ maybe_read_dollar_number (const char **format,
&& dollar_arguments_used[argnum - 1] == 1) && dollar_arguments_used[argnum - 1] == 1)
{ {
dollar_arguments_used[argnum - 1] = 2; dollar_arguments_used[argnum - 1] = 2;
warning (0, "format argument %d used more than once in %s format", warning (OPT_Wformat, "format argument %d used more than once in %s format",
argnum, fki->name); argnum, fki->name);
} }
else else
...@@ -1017,7 +1017,7 @@ avoid_dollar_number (const char *format) ...@@ -1017,7 +1017,7 @@ avoid_dollar_number (const char *format)
format++; format++;
if (*format == '$') if (*format == '$')
{ {
warning (0, "$ operand number used after format without operand number"); warning (OPT_Wformat, "$ operand number used after format without operand number");
return true; return true;
} }
return false; return false;
...@@ -1047,7 +1047,8 @@ finish_dollar_format_checking (format_check_results *res, int pointer_gap_ok) ...@@ -1047,7 +1047,8 @@ finish_dollar_format_checking (format_check_results *res, int pointer_gap_ok)
|| dollar_arguments_pointer_p[i])) || dollar_arguments_pointer_p[i]))
found_pointer_gap = true; found_pointer_gap = true;
else else
warning (0, "format argument %d unused before used argument %d in $-style format", warning (OPT_Wformat,
"format argument %d unused before used argument %d in $-style format",
i + 1, dollar_max_arg_used); i + 1, dollar_max_arg_used);
} }
} }
...@@ -1175,21 +1176,21 @@ check_format_info (function_format_info *info, tree params) ...@@ -1175,21 +1176,21 @@ check_format_info (function_format_info *info, tree params)
If the format is an empty string, this should be counted similarly to the If the format is an empty string, this should be counted similarly to the
case of extra format arguments. */ case of extra format arguments. */
if (res.number_extra_args > 0 && res.number_non_literal == 0 if (res.number_extra_args > 0 && res.number_non_literal == 0
&& res.number_other == 0 && warn_format_extra_args) && res.number_other == 0)
warning (0, "too many arguments for format"); warning (OPT_Wformat_extra_args, "too many arguments for format");
if (res.number_dollar_extra_args > 0 && res.number_non_literal == 0 if (res.number_dollar_extra_args > 0 && res.number_non_literal == 0
&& res.number_other == 0 && warn_format_extra_args) && res.number_other == 0)
warning (0, "unused arguments in $-style format"); warning (OPT_Wformat_extra_args, "unused arguments in $-style format");
if (res.number_empty > 0 && res.number_non_literal == 0 if (res.number_empty > 0 && res.number_non_literal == 0
&& res.number_other == 0 && warn_format_zero_length) && res.number_other == 0)
warning (0, "zero-length %s format string", warning (OPT_Wformat_zero_length, "zero-length %s format string",
format_types[info->format_type].name); format_types[info->format_type].name);
if (res.number_wide > 0) if (res.number_wide > 0)
warning (0, "format is a wide character string"); warning (OPT_Wformat, "format is a wide character string");
if (res.number_unterminated > 0) if (res.number_unterminated > 0)
warning (0, "unterminated format string"); warning (OPT_Wformat, "unterminated format string");
} }
/* Callback from check_function_arguments_recurse to check a /* Callback from check_function_arguments_recurse to check a
...@@ -1403,7 +1404,7 @@ check_format_info_main (format_check_results *res, ...@@ -1403,7 +1404,7 @@ check_format_info_main (format_check_results *res,
if (*format_chars == 0) if (*format_chars == 0)
{ {
if (format_chars - orig_format_chars != format_length) if (format_chars - orig_format_chars != format_length)
warning (0, "embedded %<\\0%> in format"); warning (OPT_Wformat, "embedded %<\\0%> in format");
if (info->first_arg_num != 0 && params != 0 if (info->first_arg_num != 0 && params != 0
&& has_operand_number <= 0) && has_operand_number <= 0)
{ {
...@@ -1418,7 +1419,7 @@ check_format_info_main (format_check_results *res, ...@@ -1418,7 +1419,7 @@ check_format_info_main (format_check_results *res,
continue; continue;
if (*format_chars == 0) if (*format_chars == 0)
{ {
warning (0, "spurious trailing %<%%%> in format"); warning (OPT_Wformat, "spurious trailing %<%%%> in format");
continue; continue;
} }
if (*format_chars == '%') if (*format_chars == '%')
...@@ -1462,7 +1463,7 @@ check_format_info_main (format_check_results *res, ...@@ -1462,7 +1463,7 @@ check_format_info_main (format_check_results *res,
*format_chars, NULL); *format_chars, NULL);
if (strchr (flag_chars, *format_chars) != 0) if (strchr (flag_chars, *format_chars) != 0)
{ {
warning (0, "repeated %s in format", _(s->name)); warning (OPT_Wformat, "repeated %s in format", _(s->name));
} }
else else
{ {
...@@ -1475,7 +1476,7 @@ check_format_info_main (format_check_results *res, ...@@ -1475,7 +1476,7 @@ check_format_info_main (format_check_results *res,
++format_chars; ++format_chars;
if (*format_chars == 0) if (*format_chars == 0)
{ {
warning (0, "missing fill character at end of strfmon format"); warning (OPT_Wformat, "missing fill character at end of strfmon format");
return; return;
} }
} }
...@@ -1519,7 +1520,7 @@ check_format_info_main (format_check_results *res, ...@@ -1519,7 +1520,7 @@ check_format_info_main (format_check_results *res,
{ {
if (params == 0) if (params == 0)
{ {
warning (0, "too few arguments for format"); warning (OPT_Wformat, "too few arguments for format");
return; return;
} }
cur_param = TREE_VALUE (params); cur_param = TREE_VALUE (params);
...@@ -1560,7 +1561,7 @@ check_format_info_main (format_check_results *res, ...@@ -1560,7 +1561,7 @@ check_format_info_main (format_check_results *res,
} }
if (found_width && !non_zero_width_char && if (found_width && !non_zero_width_char &&
(fki->flags & (int) FMT_FLAG_ZERO_WIDTH_BAD)) (fki->flags & (int) FMT_FLAG_ZERO_WIDTH_BAD))
warning (0, "zero width in %s format", fki->name); warning (OPT_Wformat, "zero width in %s format", fki->name);
if (found_width) if (found_width)
{ {
i = strlen (flag_chars); i = strlen (flag_chars);
...@@ -1578,7 +1579,7 @@ check_format_info_main (format_check_results *res, ...@@ -1578,7 +1579,7 @@ check_format_info_main (format_check_results *res,
flag_chars[i++] = fki->left_precision_char; flag_chars[i++] = fki->left_precision_char;
flag_chars[i] = 0; flag_chars[i] = 0;
if (!ISDIGIT (*format_chars)) if (!ISDIGIT (*format_chars))
warning (0, "empty left precision in %s format", fki->name); warning (OPT_Wformat, "empty left precision in %s format", fki->name);
while (ISDIGIT (*format_chars)) while (ISDIGIT (*format_chars))
++format_chars; ++format_chars;
} }
...@@ -1621,7 +1622,7 @@ check_format_info_main (format_check_results *res, ...@@ -1621,7 +1622,7 @@ check_format_info_main (format_check_results *res,
{ {
if (params == 0) if (params == 0)
{ {
warning (0, "too few arguments for format"); warning (OPT_Wformat, "too few arguments for format");
return; return;
} }
cur_param = TREE_VALUE (params); cur_param = TREE_VALUE (params);
...@@ -1651,7 +1652,7 @@ check_format_info_main (format_check_results *res, ...@@ -1651,7 +1652,7 @@ check_format_info_main (format_check_results *res,
{ {
if (!(fki->flags & (int) FMT_FLAG_EMPTY_PREC_OK) if (!(fki->flags & (int) FMT_FLAG_EMPTY_PREC_OK)
&& !ISDIGIT (*format_chars)) && !ISDIGIT (*format_chars))
warning (0, "empty precision in %s format", fki->name); warning (OPT_Wformat, "empty precision in %s format", fki->name);
while (ISDIGIT (*format_chars)) while (ISDIGIT (*format_chars))
++format_chars; ++format_chars;
} }
...@@ -1690,7 +1691,8 @@ check_format_info_main (format_check_results *res, ...@@ -1690,7 +1691,8 @@ check_format_info_main (format_check_results *res,
{ {
/* Warn if the length modifier is non-standard. */ /* Warn if the length modifier is non-standard. */
if (ADJ_STD (length_chars_std) > C_STD_VER) if (ADJ_STD (length_chars_std) > C_STD_VER)
warning (0, "%s does not support the %qs %s length modifier", warning (OPT_Wformat,
"%s does not support the %qs %s length modifier",
C_STD_NAME (length_chars_std), length_chars, C_STD_NAME (length_chars_std), length_chars,
fki->name); fki->name);
} }
...@@ -1706,7 +1708,7 @@ check_format_info_main (format_check_results *res, ...@@ -1706,7 +1708,7 @@ check_format_info_main (format_check_results *res,
{ {
const format_flag_spec *s = get_flag_spec (flag_specs, const format_flag_spec *s = get_flag_spec (flag_specs,
*format_chars, NULL); *format_chars, NULL);
warning (0, "repeated %s in format", _(s->name)); warning (OPT_Wformat, "repeated %s in format", _(s->name));
} }
else else
{ {
...@@ -1740,7 +1742,7 @@ check_format_info_main (format_check_results *res, ...@@ -1740,7 +1742,7 @@ check_format_info_main (format_check_results *res,
|| (!(fki->flags & (int) FMT_FLAG_FANCY_PERCENT_OK) || (!(fki->flags & (int) FMT_FLAG_FANCY_PERCENT_OK)
&& format_char == '%')) && format_char == '%'))
{ {
warning (0, "conversion lacks type at end of format"); warning (OPT_Wformat, "conversion lacks type at end of format");
continue; continue;
} }
format_chars++; format_chars++;
...@@ -1751,17 +1753,17 @@ check_format_info_main (format_check_results *res, ...@@ -1751,17 +1753,17 @@ check_format_info_main (format_check_results *res,
if (fci->format_chars == 0) if (fci->format_chars == 0)
{ {
if (ISGRAPH (format_char)) if (ISGRAPH (format_char))
warning (0, "unknown conversion type character %qc in format", warning (OPT_Wformat, "unknown conversion type character %qc in format",
format_char); format_char);
else else
warning (0, "unknown conversion type character 0x%x in format", warning (OPT_Wformat, "unknown conversion type character 0x%x in format",
format_char); format_char);
continue; continue;
} }
if (pedantic) if (pedantic)
{ {
if (ADJ_STD (fci->std) > C_STD_VER) if (ADJ_STD (fci->std) > C_STD_VER)
warning (0, "%s does not support the %<%%%c%> %s format", warning (OPT_Wformat, "%s does not support the %<%%%c%> %s format",
C_STD_NAME (fci->std), format_char, fki->name); C_STD_NAME (fci->std), format_char, fki->name);
} }
...@@ -1777,7 +1779,7 @@ check_format_info_main (format_check_results *res, ...@@ -1777,7 +1779,7 @@ check_format_info_main (format_check_results *res,
continue; continue;
if (strchr (fci->flag_chars, flag_chars[i]) == 0) if (strchr (fci->flag_chars, flag_chars[i]) == 0)
{ {
warning (0, "%s used with %<%%%c%> %s format", warning (OPT_Wformat, "%s used with %<%%%c%> %s format",
_(s->name), format_char, fki->name); _(s->name), format_char, fki->name);
d++; d++;
continue; continue;
...@@ -1786,7 +1788,7 @@ check_format_info_main (format_check_results *res, ...@@ -1786,7 +1788,7 @@ check_format_info_main (format_check_results *res,
{ {
const format_flag_spec *t; const format_flag_spec *t;
if (ADJ_STD (s->std) > C_STD_VER) if (ADJ_STD (s->std) > C_STD_VER)
warning (0, "%s does not support %s", warning (OPT_Wformat, "%s does not support %s",
C_STD_NAME (s->std), _(s->long_name)); C_STD_NAME (s->std), _(s->long_name));
t = get_flag_spec (flag_specs, flag_chars[i], fci->flags2); t = get_flag_spec (flag_specs, flag_chars[i], fci->flags2);
if (t != NULL && ADJ_STD (t->std) > ADJ_STD (s->std)) if (t != NULL && ADJ_STD (t->std) > ADJ_STD (s->std))
...@@ -1795,7 +1797,8 @@ check_format_info_main (format_check_results *res, ...@@ -1795,7 +1797,8 @@ check_format_info_main (format_check_results *res,
? t->long_name ? t->long_name
: s->long_name); : s->long_name);
if (ADJ_STD (t->std) > C_STD_VER) if (ADJ_STD (t->std) > C_STD_VER)
warning (0, "%s does not support %s with the %<%%%c%> %s format", warning (OPT_Wformat,
"%s does not support %s with the %<%%%c%> %s format",
C_STD_NAME (t->std), _(long_name), C_STD_NAME (t->std), _(long_name),
format_char, fki->name); format_char, fki->name);
} }
...@@ -1828,21 +1831,23 @@ check_format_info_main (format_check_results *res, ...@@ -1828,21 +1831,23 @@ check_format_info_main (format_check_results *res,
if (bad_flag_pairs[i].ignored) if (bad_flag_pairs[i].ignored)
{ {
if (bad_flag_pairs[i].predicate != 0) if (bad_flag_pairs[i].predicate != 0)
warning (0, "%s ignored with %s and %<%%%c%> %s format", warning (OPT_Wformat,
"%s ignored with %s and %<%%%c%> %s format",
_(s->name), _(t->name), format_char, _(s->name), _(t->name), format_char,
fki->name); fki->name);
else else
warning (0, "%s ignored with %s in %s format", warning (OPT_Wformat, "%s ignored with %s in %s format",
_(s->name), _(t->name), fki->name); _(s->name), _(t->name), fki->name);
} }
else else
{ {
if (bad_flag_pairs[i].predicate != 0) if (bad_flag_pairs[i].predicate != 0)
warning (0, "use of %s and %s together with %<%%%c%> %s format", warning (OPT_Wformat,
"use of %s and %s together with %<%%%c%> %s format",
_(s->name), _(t->name), format_char, _(s->name), _(t->name), format_char,
fki->name); fki->name);
else else
warning (0, "use of %s and %s together in %s format", warning (OPT_Wformat, "use of %s and %s together in %s format",
_(s->name), _(t->name), fki->name); _(s->name), _(t->name), fki->name);
} }
} }
...@@ -1861,10 +1866,11 @@ check_format_info_main (format_check_results *res, ...@@ -1861,10 +1866,11 @@ check_format_info_main (format_check_results *res,
else if (strchr (fci->flags2, '2') != 0) else if (strchr (fci->flags2, '2') != 0)
y2k_level = 2; y2k_level = 2;
if (y2k_level == 3) if (y2k_level == 3)
warning (0, "%<%%%c%> yields only last 2 digits of year in some locales", warning (OPT_Wformat_y2k, "%<%%%c%> yields only last 2 digits of "
format_char); "year in some locales", format_char);
else if (y2k_level == 2) else if (y2k_level == 2)
warning (0, "%<%%%c%> yields only last 2 digits of year", format_char); warning (OPT_Wformat_y2k, "%<%%%c%> yields only last 2 digits of "
"year", format_char);
} }
if (strchr (fci->flags2, '[') != 0) if (strchr (fci->flags2, '[') != 0)
...@@ -1880,7 +1886,7 @@ check_format_info_main (format_check_results *res, ...@@ -1880,7 +1886,7 @@ check_format_info_main (format_check_results *res,
++format_chars; ++format_chars;
if (*format_chars != ']') if (*format_chars != ']')
/* The end of the format string was reached. */ /* The end of the format string was reached. */
warning (0, "no closing %<]%> for %<%%[%> format"); warning (OPT_Wformat, "no closing %<]%> for %<%%[%> format");
} }
wanted_type = 0; wanted_type = 0;
...@@ -1893,14 +1899,15 @@ check_format_info_main (format_check_results *res, ...@@ -1893,14 +1899,15 @@ check_format_info_main (format_check_results *res,
wanted_type_std = fci->types[length_chars_val].std; wanted_type_std = fci->types[length_chars_val].std;
if (wanted_type == 0) if (wanted_type == 0)
{ {
warning (0, "use of %qs length modifier with %qc type character", warning (OPT_Wformat,
"use of %qs length modifier with %qc type character",
length_chars, format_char); length_chars, format_char);
/* Heuristic: skip one argument when an invalid length/type /* Heuristic: skip one argument when an invalid length/type
combination is encountered. */ combination is encountered. */
arg_num++; arg_num++;
if (params == 0) if (params == 0)
{ {
warning (0, "too few arguments for format"); warning (OPT_Wformat, "too few arguments for format");
return; return;
} }
params = TREE_CHAIN (params); params = TREE_CHAIN (params);
...@@ -1914,7 +1921,8 @@ check_format_info_main (format_check_results *res, ...@@ -1914,7 +1921,8 @@ check_format_info_main (format_check_results *res,
&& ADJ_STD (wanted_type_std) > ADJ_STD (fci->std)) && ADJ_STD (wanted_type_std) > ADJ_STD (fci->std))
{ {
if (ADJ_STD (wanted_type_std) > C_STD_VER) if (ADJ_STD (wanted_type_std) > C_STD_VER)
warning (0, "%s does not support the %<%%%s%c%> %s format", warning (OPT_Wformat,
"%s does not support the %<%%%s%c%> %s format",
C_STD_NAME (wanted_type_std), length_chars, C_STD_NAME (wanted_type_std), length_chars,
format_char, fki->name); format_char, fki->name);
} }
...@@ -1931,9 +1939,11 @@ check_format_info_main (format_check_results *res, ...@@ -1931,9 +1939,11 @@ check_format_info_main (format_check_results *res,
if (main_arg_num != 0) if (main_arg_num != 0)
{ {
if (suppressed) if (suppressed)
warning (0, "operand number specified with suppressed assignment"); warning (OPT_Wformat, "operand number specified with "
"suppressed assignment");
else else
warning (0, "operand number specified for format taking no argument"); warning (OPT_Wformat, "operand number specified for format "
"taking no argument");
} }
} }
else else
...@@ -1950,7 +1960,7 @@ check_format_info_main (format_check_results *res, ...@@ -1950,7 +1960,7 @@ check_format_info_main (format_check_results *res,
++arg_num; ++arg_num;
if (has_operand_number > 0) if (has_operand_number > 0)
{ {
warning (0, "missing $ operand number in format"); warning (OPT_Wformat, "missing $ operand number in format");
return; return;
} }
else else
...@@ -1962,7 +1972,7 @@ check_format_info_main (format_check_results *res, ...@@ -1962,7 +1972,7 @@ check_format_info_main (format_check_results *res,
{ {
if (params == 0) if (params == 0)
{ {
warning (0, "too few arguments for format"); warning (OPT_Wformat, "too few arguments for format");
return; return;
} }
...@@ -2075,16 +2085,16 @@ check_format_types (format_wanted_type *types, const char *format_start, ...@@ -2075,16 +2085,16 @@ check_format_types (format_wanted_type *types, const char *format_start,
&& i == 0 && i == 0
&& cur_param != 0 && cur_param != 0
&& integer_zerop (cur_param)) && integer_zerop (cur_param))
warning (0, "writing through null pointer (argument %d)", warning (OPT_Wformat, "writing through null pointer "
arg_num); "(argument %d)", arg_num);
/* Check for reading through a NULL pointer. */ /* Check for reading through a NULL pointer. */
if (types->reading_from_flag if (types->reading_from_flag
&& i == 0 && i == 0
&& cur_param != 0 && cur_param != 0
&& integer_zerop (cur_param)) && integer_zerop (cur_param))
warning (0, "reading through null pointer (argument %d)", warning (OPT_Wformat, "reading through null pointer "
arg_num); "(argument %d)", arg_num);
if (cur_param != 0 && TREE_CODE (cur_param) == ADDR_EXPR) if (cur_param != 0 && TREE_CODE (cur_param) == ADDR_EXPR)
cur_param = TREE_OPERAND (cur_param, 0); cur_param = TREE_OPERAND (cur_param, 0);
...@@ -2103,8 +2113,8 @@ check_format_types (format_wanted_type *types, const char *format_start, ...@@ -2103,8 +2113,8 @@ check_format_types (format_wanted_type *types, const char *format_start,
&& (CONSTANT_CLASS_P (cur_param) && (CONSTANT_CLASS_P (cur_param)
|| (DECL_P (cur_param) || (DECL_P (cur_param)
&& TREE_READONLY (cur_param)))))) && TREE_READONLY (cur_param))))))
warning (0, "writing into constant object (argument %d)", warning (OPT_Wformat, "writing into constant object "
arg_num); "(argument %d)", arg_num);
/* If there are extra type qualifiers beyond the first /* If there are extra type qualifiers beyond the first
indirection, then this makes the types technically indirection, then this makes the types technically
...@@ -2114,8 +2124,8 @@ check_format_types (format_wanted_type *types, const char *format_start, ...@@ -2114,8 +2124,8 @@ check_format_types (format_wanted_type *types, const char *format_start,
&& (TYPE_READONLY (cur_type) && (TYPE_READONLY (cur_type)
|| TYPE_VOLATILE (cur_type) || TYPE_VOLATILE (cur_type)
|| TYPE_RESTRICT (cur_type))) || TYPE_RESTRICT (cur_type)))
warning (0, "extra type qualifiers in format argument " warning (OPT_Wformat, "extra type qualifiers in format "
"(argument %d)", "argument (argument %d)",
arg_num); arg_num);
} }
...@@ -2225,20 +2235,24 @@ format_type_warning (const char *descr, const char *format_start, ...@@ -2225,20 +2235,24 @@ format_type_warning (const char *descr, const char *format_start,
if (wanted_type_name) if (wanted_type_name)
{ {
if (descr) if (descr)
warning (0, "%s should have type %<%s%s%>, but argument %d has type %qT", warning (OPT_Wformat, "%s should have type %<%s%s%>, "
"but argument %d has type %qT",
descr, wanted_type_name, p, arg_num, arg_type); descr, wanted_type_name, p, arg_num, arg_type);
else else
warning (0, "format %q.*s expects type %<%s%s%>, but argument %d has type %qT", warning (OPT_Wformat, "format %q.*s expects type %<%s%s%>, "
"but argument %d has type %qT",
format_length, format_start, wanted_type_name, p, format_length, format_start, wanted_type_name, p,
arg_num, arg_type); arg_num, arg_type);
} }
else else
{ {
if (descr) if (descr)
warning (0, "%s should have type %<%T%s%>, but argument %d has type %qT", warning (OPT_Wformat, "%s should have type %<%T%s%>, "
"but argument %d has type %qT",
descr, wanted_type, p, arg_num, arg_type); descr, wanted_type, p, arg_num, arg_type);
else else
warning (0, "format %q.*s expects type %<%T%s%>, but argument %d has type %qT", warning (OPT_Wformat, "format %q.*s expects type %<%T%s%>, "
"but argument %d has type %qT",
format_length, format_start, wanted_type, p, arg_num, arg_type); format_length, format_start, wanted_type, p, arg_num, arg_type);
} }
} }
......
...@@ -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