https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119893
Bug ID: 119893 Summary: '-Wnonnull' should not warn null pointer use in 'typeof' expression Product: gcc Version: 14.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: Explorer09 at gmail dot com Target Milestone: --- Test code: ```c __attribute__((nonnull)) \ int func(void *p); __typeof__(func((void *)0)) func2(void *p); typeof(func((void *)0)) main(void) { return 0; } ``` Compiling with `gcc -std=gnu23 -Wnonnull` produces warnings like these: ```text <source>:4:12: warning: argument 1 null where non-null expected [-Wnonnull] 4 | __typeof__(func((void *)0)) func2(void *p); | ^~~~ <source>:2:30: note: in a call to function 'func' declared 'nonnull' 2 | __attribute__((nonnull)) int func(void *p); | ^~~~ <source>:6:8: warning: argument 1 null where non-null expected [-Wnonnull] 6 | typeof(func((void *)0)) main(void) { | ^~~~ <source>:2:30: note: in a call to function 'func' declared 'nonnull' 2 | __attribute__((nonnull)) int func(void *p); | ^~~~ ``` Clang 20 produces no warnings, and I expect GCC produce no warnings either. In this 'typeof' expression, the function should be never called and the fact I passed a `(void *)0` there shouldn't matter. A workaround is to add an offset to null pointer so the address becomes technically non-zero: ```c /* Workaround */ __typeof__(func(1 + (void *)0)) func2(void *p); ```