[C89/C2x] Diagnose calls to a function without a prototype but passes arguments
authorAaron Ballman <aaron@aaronballman.com>
Fri, 15 Apr 2022 13:07:28 +0000 (09:07 -0400)
committerAaron Ballman <aaron@aaronballman.com>
Fri, 15 Apr 2022 13:08:54 +0000 (09:08 -0400)
commit33d3fc4466479285121cbb1a62db249454da0bda
tree1b15e6ed95ba7f6b244c1cfbff7afb133b196e79
parent4db65e279b96e2af9a4ea2c1e2acc40a64de2a0e
[C89/C2x] Diagnose calls to a function without a prototype but passes arguments

This catches places where a function without a prototype is
accidentally used, potentially passing an incorrect number of
arguments, and is a follow-up to the work done in
https://reviews.llvm.org/D122895 and described in the RFC
(https://discourse.llvm.org/t/rfc-enabling-wstrict-prototypes-by-default-in-c).
The diagnostic is grouped under the new -Wdeprecated-non-prototypes
warning group and is enabled by default.

The diagnostic is disabled if the function being called was implicitly
declared (the user already gets an on-by-default warning about the
creation of the implicit function declaration, so no need to warn them
twice on the same line). Additionally, the diagnostic is disabled if
the declaration of the function without a prototype was in a location
where the user explicitly disabled deprecation warnings for functions
without prototypes (this allows the provider of the API a way to
disable the diagnostic at call sites because the lack of prototype is
intentional).
clang/docs/ReleaseNotes.rst
clang/include/clang/Basic/DiagnosticSemaKinds.td
clang/lib/Sema/SemaExpr.cpp
clang/test/Analysis/nullability.c
clang/test/Analysis/svalbuilder-float-cast.c
clang/test/Sema/warn-deprecated-non-prototype.c