[PATCH] D66919: Warn about zero-parameter K&R definitions in -Wstrict-prototypes

Duncan P. N. Exon Smith via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Aug 30 12:37:06 PDT 2019


dexonsmith added a comment.

> In D66919#1650174 <https://reviews.llvm.org/D66919#1650174>, @dexonsmith wrote:
> 
>> We could carve out a `-W` flag (if it doesn't already exist) that warns if you incorrectly pass parameters to a function whose definition has no prototype
> 
> 
> The warning exists, but there is no flag apparently.
> 
>   void f() {}
>   void g() {
>       f(0);
>   }
> 
> 
> spits out
> 
>   test.c:3:8: warning: too many arguments in call to 'f'
>       f(0);
>       ~  ^

Great; then I think we should add a flag.  I would suggest `-Werror`-by-default since the compiler knows it's incorrect code.

In D66919#1651473 <https://reviews.llvm.org/D66919#1651473>, @aaronpuchert wrote:

> "Meaning" is a difficult term. What we know is that this is a K&R-style definition, and does not define a prototype. So one would expect `-Wstrict-prototypes` to warn about this.


All I'm suggesting is that the compiler knows that the call is wrong, so it should error (by-default).

After adding that, my feeling is that diagnosing a missing prototype on a defining declaration would be a style nitpick that might fit better in clang-tidy.  IIRC, when we rolled out `-Wstrict-prototypes` we explicitly excluded this case since it hit a lot of code without finding bugs.

But at the same time, I don't want to block this.  If you do pursue this please use a distinct `-W` flag so it can be turned off without losing the benefits of `-Wstrict-prototypes`.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D66919/new/

https://reviews.llvm.org/D66919





More information about the cfe-commits mailing list