https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94746
Bug ID: 94746
Summary: -Wsizeof-pointer-div not triggered by system header
macros
Product: gcc
Version: 9.3.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
Assignee: unassigned at gcc dot gnu.org
Reporter: colomar.6.4.3 at gmail dot com
Target Milestone: ---
I found out that the macro `#define __arraycount(__x) (sizeof(__x) /
sizeof(__x[0]))` which is in libbsd's <sys/cdefs.h> doesn't trigger any warning
when applied to a pointer.
I investigated the reason, and I found out that my own `#define ARRAY_SIZE(arr)
(sizeof(arr) / sizeof((arr)[0]))` doesn't trigger any warnings either (it is
installed in `/usr/local/include/`, but it does trigger warnings when compiling
before installing it.
So I came to the conclusion that the bug is the following:
GCC suppresses warnings in system headers, which of course is a generally good
thing, but in this case it is not a good thing.
Maybe a solution would be to not suppress warnings about macros defined in
system headers (this might suddenly trigger lots of warnings, some of them
maybe unwanted, I don't know). There might be more bugs like this one being
ignored.
Code to reproduce the bug:
#include <sys/cdefs.h>
int main(void)
{
int *p;
return __arraycount(p);
}
Minimum compilation settings to reproduce the bug:
$ gcc -Wsizeof-pointer-div bug.c `pkg-config --cflags libbsd-overlay`