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>
PR target/22134
......
......@@ -801,14 +801,13 @@ pop_scope (void)
case VAR_DECL:
/* Warnings for unused variables. */
if (warn_unused_variable
&& !TREE_USED (p)
if (!TREE_USED (p)
&& !DECL_IN_SYSTEM_HEADER (p)
&& DECL_NAME (p)
&& !DECL_ARTIFICIAL (p)
&& scope != file_scope
&& scope != external_scope)
warning (0, "%Junused variable %qD", p, p);
warning (OPT_Wunused_variable, "%Junused variable %qD", p, p);
if (b->inner_comp)
{
......@@ -1392,8 +1391,8 @@ diagnose_mismatched_decls (tree newdecl, tree olddecl,
}
else if (warn_traditional)
{
warning (0, "%Jnon-static declaration of %qD follows "
"static declaration", newdecl, newdecl);
warning (OPT_Wtraditional, "%Jnon-static declaration of %qD "
"follows static declaration", newdecl, newdecl);
warned = true;
}
}
......@@ -1445,8 +1444,8 @@ diagnose_mismatched_decls (tree newdecl, tree olddecl,
}
else if (warn_traditional)
{
warning (0, "%Jnon-static declaration of %qD follows "
"static declaration", newdecl, newdecl);
warning (OPT_Wtraditional, "%Jnon-static declaration of %qD "
"follows static declaration", newdecl, newdecl);
warned = true;
}
}
......@@ -1577,7 +1576,8 @@ diagnose_mismatched_decls (tree newdecl, tree olddecl,
&& !(TREE_CODE (newdecl) == PARM_DECL
&& 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;
}
......@@ -2121,10 +2121,9 @@ pushdecl (tree x)
visdecl = b->decl;
vistype = TREE_TYPE (visdecl);
}
if (warn_nested_externs
&& scope != file_scope
if (scope != file_scope
&& !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))
{
......@@ -3102,7 +3101,7 @@ start_decl (struct c_declarator *declarator, struct c_declspecs *declspecs,
if (warn_main > 0 && TREE_CODE (decl) != FUNCTION_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)
/* 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)
{
tree arg_types = arg_info->types;
if (warn_strict_prototypes && arg_types == 0 && !funcdef_flag
&& !in_system_header)
warning (0, "function declaration isn%'t a prototype");
if (arg_types == 0 && !funcdef_flag && !in_system_header)
warning (OPT_Wstrict_prototypes,
"function declaration isn%'t a prototype");
if (arg_types == error_mark_node)
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,
&& old_decl != error_mark_node
&& TYPE_ARG_TYPES (TREE_TYPE (decl1)) == 0
&& 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. */
else if (warn_missing_prototypes
&& old_decl != error_mark_node
&& TREE_PUBLIC (decl1)
&& !MAIN_NAME_P (DECL_NAME (decl1))
&& 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
if the function has already been used. */
else if (warn_missing_prototypes
......@@ -5908,14 +5909,16 @@ start_function (struct c_declspecs *declspecs, struct c_declarator *declarator,
&& old_decl != error_mark_node
&& TREE_USED (old_decl)
&& 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);
/* Optionally warn of any global def with no previous declaration. */
else if (warn_missing_declarations
&& TREE_PUBLIC (decl1)
&& old_decl == 0
&& !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
if the function has already been used. */
else if (warn_missing_declarations
......@@ -5923,7 +5926,8 @@ start_function (struct c_declspecs *declspecs, struct c_declarator *declarator,
&& old_decl != error_mark_node
&& TREE_USED (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);
/* This is a definition, not a reference.
......@@ -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
(this happens when a function definition has just an ellipsis in
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)
warning (0, "%Jtraditional C rejects ISO C style function definitions",
warning (OPT_Wtraditional,
"%Jtraditional C rejects ISO C style function definitions",
fndecl);
/* 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)
if (flag_isoc99)
pedwarn ("%Jtype of %qD defaults to %<int%>", decl, decl);
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;
......@@ -6518,7 +6524,8 @@ finish_function (void)
inline function, as we might never be compiled separately. */
&& 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;
}
......@@ -6527,7 +6534,7 @@ finish_function (void)
if (extra_warnings
&& current_function_returns_value
&& 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
info for the epilogue. */
......@@ -7265,7 +7272,7 @@ declspecs_add_scspec (struct c_declspecs *specs, tree scspec)
&& C_IS_RESERVED_WORD (scspec));
i = C_RID_CODE (scspec);
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)
{
case RID_INLINE:
......
......@@ -1064,7 +1064,7 @@ function_types_compatible_p (tree f1, tree f2)
return 0;
/* If one of these types comes from a non-prototype fn definition,
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)
&& 1 != type_lists_compatible_p (args2, TYPE_ACTUAL_ARG_TYPES (f1)))
val = 2;
......@@ -1721,9 +1721,9 @@ build_array_ref (tree array, tree index)
deliberately. ??? Existing practice has also been to warn only
when the char index is syntactically the index, not for
char[array]. */
if (warn_char_subscripts && !swapped
if (!swapped
&& 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. */
index = default_conversion (index);
......@@ -2234,8 +2234,9 @@ convert_arguments (tree typelist, tree values, tree function, tree fundecl)
and the actual arg is that enum type. */
;
else if (formal_prec != TYPE_PRECISION (type1))
warning (0, "passing argument %d of %qE with different "
"width due to prototype", argnum, rname);
warning (OPT_Wconversion, "passing argument %d of %qE "
"with different width due to prototype",
argnum, rname);
else if (TYPE_UNSIGNED (type) == TYPE_UNSIGNED (type1))
;
/* Don't complain if the formal parameter type
......@@ -2256,11 +2257,12 @@ convert_arguments (tree typelist, tree values, tree function, tree fundecl)
&& TYPE_UNSIGNED (TREE_TYPE (val)))
;
else if (TYPE_UNSIGNED (type))
warning (0, "passing argument %d of %qE as unsigned "
"due to prototype", argnum, rname);
warning (OPT_Wconversion, "passing argument %d of %qE "
"as unsigned due to prototype",
argnum, rname);
else
warning (0, "passing argument %d of %qE as signed "
"due to prototype", argnum, rname);
warning (OPT_Wconversion, "passing argument %d of %qE "
"as signed due to prototype", argnum, rname);
}
}
......@@ -3249,7 +3251,7 @@ build_c_cast (tree type, tree expr)
}
/* Warn about possible alignment problems. */
if (STRICT_ALIGNMENT && warn_cast_align
if (STRICT_ALIGNMENT
&& TREE_CODE (type) == POINTER_TYPE
&& TREE_CODE (otype) == POINTER_TYPE
&& TREE_CODE (TREE_TYPE (otype)) != VOID_TYPE
......@@ -3260,28 +3262,28 @@ build_c_cast (tree type, tree expr)
|| TREE_CODE (TREE_TYPE (otype)) == RECORD_TYPE)
&& TYPE_MODE (TREE_TYPE (otype)) == VOIDmode)
&& 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
&& TREE_CODE (type) == INTEGER_TYPE
if (TREE_CODE (type) == INTEGER_TYPE
&& TREE_CODE (otype) == POINTER_TYPE
&& TYPE_PRECISION (type) != TYPE_PRECISION (otype)
&& !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
&& TREE_CODE (value) == CALL_EXPR
if (TREE_CODE (value) == CALL_EXPR
&& TREE_CODE (type) != TREE_CODE (otype))
warning (0, "cast from function call of type %qT to non-matching "
"type %qT", otype, type);
warning (OPT_Wbad_function_cast, "cast from function call of type %qT "
"to non-matching type %qT", otype, type);
if (warn_int_to_pointer_cast
&& TREE_CODE (type) == POINTER_TYPE
if (TREE_CODE (type) == POINTER_TYPE
&& TREE_CODE (otype) == INTEGER_TYPE
&& TYPE_PRECISION (type) != TYPE_PRECISION (otype)
/* Don't warn about converting any constant. */
&& !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
&& TREE_CODE (type) == POINTER_TYPE
......@@ -3294,17 +3296,20 @@ build_c_cast (tree type, tree expr)
/* Casting the address of an object to non void pointer. Warn
if the cast breaks type based aliasing. */
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
{
HOST_WIDE_INT set1 = get_alias_set (TREE_TYPE (TREE_OPERAND (expr, 0)));
HOST_WIDE_INT set2 = get_alias_set (TREE_TYPE (type));
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
&& !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)
/* 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))
warning (0, "traditional C rejects automatic aggregate initialization");
warning (OPT_Wtraditional, "traditional C rejects automatic "
"aggregate initialization");
DECL_INITIAL (decl) = value;
......@@ -6240,10 +6246,11 @@ process_init_element (struct c_expr value)
again on the assumption that this must be conditional on
__STDC__ anyway (and we've already complained about the
member-designator already). */
if (warn_traditional && !in_system_header && !constructor_designated
if (!in_system_header && !constructor_designated
&& !(value.value && (integer_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. */
if (value.value != 0
......@@ -6751,11 +6758,11 @@ c_start_case (tree 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_unsigned_type_node))
warning (0, "%<long%> switch expression not converted to "
"%<int%> in ISO C");
warning (OPT_Wtraditional, "%<long%> switch expression not "
"converted to %<int%> in ISO C");
exp = default_conversion (exp);
type = TREE_TYPE (exp);
......
......@@ -1266,9 +1266,9 @@ finalize_record_size (record_layout_info rli)
TYPE_SIZE_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)
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
&& TYPE_PACKED (rli->t) && ! rli->packed_maybe_necessary
......@@ -1298,19 +1298,19 @@ finalize_record_size (record_layout_info rli)
name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (rli->t)));
if (STRICT_ALIGNMENT)
warning (OPT_Wattributes, "packed attribute causes inefficient "
warning (OPT_Wpacked, "packed attribute causes inefficient "
"alignment for %qs", name);
else
warning (OPT_Wattributes,
warning (OPT_Wpacked,
"packed attribute is unnecessary for %qs", name);
}
else
{
if (STRICT_ALIGNMENT)
warning (OPT_Wattributes,
warning (OPT_Wpacked,
"packed attribute causes inefficient alignment");
else
warning (OPT_Wattributes, "packed attribute is unnecessary");
warning (OPT_Wpacked, "packed attribute is unnecessary");
}
}
}
......
......@@ -5130,8 +5130,8 @@ execute_warn_function_noreturn (void)
&& !TREE_THIS_VOLATILE (cfun->decl)
&& EDGE_COUNT (EXIT_BLOCK_PTR->preds) == 0
&& !lang_hooks.function.missing_noreturn_ok_p (cfun->decl))
warning (0, "%Jfunction might be possible candidate for "
"attribute %<noreturn%>",
warning (OPT_Wmissing_noreturn, "%Jfunction might be possible candidate "
"for attribute %<noreturn%>",
cfun->decl);
}
......
......@@ -1973,8 +1973,9 @@ expand_call_inline (basic_block bb, tree stmt, tree *tp, void *data)
/* Avoid warnings during early inline pass. */
&& (!flag_unit_at_a_time || cgraph_global_info_ready))
{
warning (0, "%Jinlining failed in call to %qF: %s", fn, fn, reason);
warning (0, "called from here");
warning (OPT_Winline, "%Jinlining failed in call to %qF: %s",
fn, fn, reason);
warning (OPT_Winline, "called from here");
}
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