On 3/26/24 18:10, Philippe Mathieu-Daudé wrote:
Compilers are clever enough to inline code when necessary.
The only case we accept an inline function is static in
header (we use C, not C++).
Add the -Wstatic-in-inline CPPFLAG to prevent public and
inline function to be added in the code base.
No problem with the first three patches, but -Wstatic-in-inline is not
warning for non-static inline functions. The warning is enabled by
default by GCC (which has no way to disable it even) and by clang
outside headers:
f.h:
static int y;
inline int f()
{
return y;
}
f.c:
#include "f.h"
int main()
{
}
$ clang f.c
./f.h:5:12: warning: static variable 'y' is used in an inline function
with external linkage [-Wstatic-in-inline]
$ gcc f.c
f.h:5:12: warning: ‘y’ is static but used in inline function ‘f’ which
is not static
The actual effect of this patch is to enable the warning on clang *even
outside headers* (clang only enables the warning in headers by default
because, if a static variable belongs to the main source file, it has a
single definition anyway unlike if it's defined in an included file).
For now I'm queuing patches 1-3 only.
Paolo
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20240313184954.42513-5-philmd@linaro.org>
Reviewed-by: Thomas Huth <thuth@redhat.com>
---
meson.build | 1 +
1 file changed, 1 insertion(+)
diff --git a/meson.build b/meson.build
index c9c3217ba4..f400f7d36c 100644
--- a/meson.build
+++ b/meson.build
@@ -591,6 +591,7 @@ warn_flags = [
'-Wold-style-definition',
'-Wredundant-decls',
'-Wshadow=local',
+ '-Wstatic-in-inline',
'-Wstrict-prototypes',
'-Wtype-limits',
'-Wundef',