warn on unused result without attribute warn_unused_result
Prathamesh Kulkarni
prathamesh.kulkarni@linaro.org
Sun Oct 16 16:52:00 GMT 2016
On 14 October 2016 at 20:34, Martin Sebor <msebor@gmail.com> wrote:
> On 10/13/2016 12:32 PM, Ben Burns wrote:
>>
>> Hello gcc contributors.
>>
>> I had an issue which was ultimately caused by not using the return
>> value of a function and I'm trying to find a compile-time warning that
>> could have alerted me to the issue.
>>
>> I've been looking through the documentation but I'm not seeing a
>> compile-time warning flag about ignoring function return values. Sure,
>> I can add the attribute "warn_unused_result" but I'm wondering if the
>> same affect is possible (i.e., for all functions) without changing any
>> code. I feel like this must have come up before and there's a reason
>> this warning doesn't exist -- perhaps this is better handled by a
>> static analysis tool, or perhaps it generates too much noise -- but if
>> there was a previous discussion about this I'd appreciate being
>> pointed in that direction. Or perhaps I'm just not searching for the
>> right terms, in which case I apologize for taking your time.
>
>
> I don't know if the idea has ever been discussed but because
I had submitted a patch to warn for unused return value of pure/const functions,
but it didn't make it into trunk because it gave false positives for
conditionally defined macros:
https://gcc.gnu.org/ml/gcc-patches/2016-07/msg01672.html
Thanks,
Prathamesh
> the return value of many common functions is rarely used (all
> the string manipulation functions in the C library and many stdio
> functions, for instance) issuing a warning for it would generate
> far too much noise to be useful. It's quite easy to add this
> warning as an experiment. With the patch below GCC emits the
> following warnings for your example:
>
> a.c: In function ‘main’:
> a.c:16:5: warning: ignoring return value of ‘scanf’ [-Wany-unused-result]
> scanf("%d", &b);
> ^~~~~~~~~~~~~~~
> a.c:17:5: warning: ignoring return value of ‘func’ [-Wany-unused-result]
> func(b);
> ^~~~~~~
> a.c:18:5: warning: ignoring return value of ‘inline_func’
> [-Wany-unused-result]
> inline_func(b);
> ^~~~~~~~~~~~~~
>
> Martin
>
>
> diff --git a/gcc/c-family/c.opt b/gcc/c-family/c.opt
> index e146781..21e0daa 100644
> --- a/gcc/c-family/c.opt
> +++ b/gcc/c-family/c.opt
> @@ -998,6 +998,10 @@ Wunused-result
> C ObjC C++ ObjC++ Var(warn_unused_result) Init(1) Warning
> Warn if a caller of a function, marked with attribute warn_unused_result,
> does not use its return value.
>
> +Wany-unused-result
> +C ObjC C++ ObjC++ Var(warn_any_unused_result) Init(0) Warning
> +Warn if a caller of a function does not use its return value.
> +
> Wunused-variable
> C ObjC C++ ObjC++ LangEnabledBy(C ObjC C++ ObjC++,Wunused)
> ; documented in common.opt
> diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c
> index 2ed450c..462c440 100644
> --- a/gcc/tree-cfg.c
> +++ b/gcc/tree-cfg.c
> @@ -8920,6 +8920,17 @@ do_warn_unused_result (gimple_seq seq)
> "ignoring return value of function "
> "declared with attribute warn_unused_result");
> }
> + else if (warn_any_unused_result)
> + {
> + location_t loc = gimple_location (g);
> +
> + if (fdecl)
> + warning_at (loc, OPT_Wany_unused_result,
> + "ignoring return value of %qD", fdecl);
> + else
> + warning_at (loc, OPT_Wany_unused_result,
> + "ignoring return value of function");
> + }
> break;
>
> default:
>
More information about the Gcc-help
mailing list