Commit e45046ae by Joseph Myers Committed by Joseph Myers

c-common.c (check_function_format): Don't suggest adding format attributes to…

c-common.c (check_function_format): Don't suggest adding format attributes to functions with no parameter to which...

	* c-common.c (check_function_format): Don't suggest adding format
	attributes to functions with no parameter to which to add them.

testsuite:
	* gcc.dg/format-miss-2.c: New test.

From-SVN: r38163
parent d82a33c6
2000-12-09 Joseph S. Myers <jsm28@cam.ac.uk>
* c-common.c (check_function_format): Don't suggest adding format
attributes to functions with no parameter to which to add them.
2000-12-09 Nick Clifton <nickc@redhat.com>
* config/arm/arm.c (arm_expand_prologue): Mark the generated
......
......@@ -2047,8 +2047,25 @@ check_function_format (status, name, assembler_name, params)
&& info2->format_type == info->format_type)
break;
if (info2 == NULL)
warning ("function might be possible candidate for `%s' format attribute",
format_types[info->format_type].name);
{
/* Check if the current function has a parameter to which
the format attribute could be attached; if not, it
can't be a candidate for a format attribute, despite
the vprintf-like or vscanf-like call. */
tree args;
for (args = DECL_ARGUMENTS (current_function_decl);
args != 0;
args = TREE_CHAIN (args))
{
if (TREE_CODE (TREE_TYPE (args)) == POINTER_TYPE
&& (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (args)))
== char_type_node))
break;
}
if (args != 0)
warning ("function might be possible candidate for `%s' format attribute",
format_types[info->format_type].name);
}
}
break;
}
......
2000-12-09 Joseph S. Myers <jsm28@cam.ac.uk>
* gcc.dg/format-miss-2.c: New test.
2000-12-09 Neil Booth <neilb@earthling.net>
* gcc.dg/cpp/lineflags.c: New tests.
......
/* Test for warnings for missing format attributes. Don't warn if no
relevant parameters for a format attribute; see c/1017. */
/* Origin: Joseph Myers <jsm28@cam.ac.uk> */
/* { dg-do compile } */
/* { dg-options "-std=gnu99 -Wformat -Wmissing-format-attribute" } */
#include <stdarg.h>
extern int vprintf (const char *restrict, va_list);
void
foo (int i, ...)
{
va_list ap;
va_start (ap, i);
vprintf ("Foo %s bar %s", ap); /* { dg-bogus "candidate" "bogus printf attribute warning" } */
va_end (ap);
}
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