diff options
author | Joseph Myers <jsm28@cam.ac.uk> | 2000-12-09 21:26:56 +0000 |
---|---|---|
committer | Joseph Myers <jsm28@gcc.gnu.org> | 2000-12-09 21:26:56 +0000 |
commit | e45046aeda064dac8461f0037eb221cca677c9d0 (patch) | |
tree | 8a5eb4e052f246c02d053a731de53400bfee8a98 /gcc/c-common.c | |
parent | d82a33c6bd3f83bb032bef6a23f29cc72b17ceb0 (diff) | |
download | gcc-e45046aeda064dac8461f0037eb221cca677c9d0.zip gcc-e45046aeda064dac8461f0037eb221cca677c9d0.tar.gz gcc-e45046aeda064dac8461f0037eb221cca677c9d0.tar.bz2 |
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
Diffstat (limited to 'gcc/c-common.c')
-rw-r--r-- | gcc/c-common.c | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/gcc/c-common.c b/gcc/c-common.c index 2baba02..1e766e6 100644 --- a/gcc/c-common.c +++ b/gcc/c-common.c @@ -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; } |