https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118005
Bug ID: 118005
Summary: Incorrect diagnostic combining [[gnu::noipa]] and
inline
Product: gcc
Version: 14.2.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
Assignee: unassigned at gcc dot gnu.org
Reporter: alx at kernel dot org
Target Milestone: ---
Hi,
I use [[gnu::noipa]] in (C99) inline functions for the following reasons:
Within my library, the functions are inline, for an optimized library.
In the exported headers, I add the [[gnu::noipa]] attribute to the inline
functions, so that users don't get anything inline, which provides a strong
interface boundary, so that if any bugs are found in the library, fixing the
.so is enough, and the world doesn't need to be recompiled.
So, I provide inline definitions, but in the user code, a macro will add the
attribute to invalidate 'inline'.
This results in the following diagnostic:
$ gcc --version | head -n1
gcc (Debian 14.2.0-8) 14.2.0
$ cat inline.c
[[gnu::noipa]] inline int f(void);
inline int f(void)
{
return 42;
}
$ gcc -Wall -Wextra -S inline.c
inline.c:1:27: warning: inline function ‘f’ given attribute ‘noinline’
[-Wattributes]
1 | [[gnu::noipa]] inline int f(void);
| ^
inline.c:4:1: warning: inline declaration of ‘f’ follows declaration with
attribute ‘noinline’ [-Wattributes]
4 | {
| ^
inline.c:1:27: note: previous declaration of ‘f’ with type ‘int(void)’
1 | [[gnu::noipa]] inline int f(void);
| ^
This diagnostic is wrong, because it thinks I'm using [[gnu::noinline]], while
I'm actually using [[gnu::noipa]].
Also, I would like to have a more precise know to disable this diagnostic,
without having to turn off the entire -Wattributes. How about
-Wattributes-noinline-on-inline-func and/or -Wattributes-noipa-on-inline-func?
Or maybe just remove this diagnostic? I don't think it's very useful.