https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78304
Jakub Jelinek <jakub at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |jakub at gcc dot gnu.org
--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
If without -Wsystem-headers the warning is suppressed just because the
particular part of the concatenated string comes from system header, then I'd
say that is a clear bug. For whether -Wsystem-headers applies or not in this
case I'd say it should matter whether any part of the concatenated string comes
from non-system header, or perhaps even whether the corresponding argument
comes from non-system header. If the whole call is in a system header,
-Wsystem-headers should apply, but in this case that looks wrong.
Also, when the % comes from one place and the following u comes from another,
picking the u location rather than % location is quite unfortunate:
In file included from pr78304.c:1:0:
pr78304.c: In function ‘main’:
/usr/include/inttypes.h:104:19: warning: format ‘%u’ expects argument of type
‘unsigned int’, but argument 2 has type ‘size_t {aka long unsigned int}’
[-Wformat=]
# define PRIu32 "u"
If the entire %u comes from there, perhaps (but it is still very hard to
decipher, as no macro context is printed), but for the mixed case I think it is
better to go with the location (if any) that can be found both in the macro
context of one of the parts and the other spot.