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`