https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108646
Bug ID: 108646 Summary: nonnull attribute does not detect variables that are NULL being passed Product: gcc Version: 12.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: jg at jguk dot org Target Milestone: --- If we pass NULL directly, there is a good warning (pasted below from today on Godblot.org latest gcc trunk) However, there is no error if passing a variable set to NULL. Could gcc detect this situation? #include <cstddef> void * mem2(void *dest) __attribute__((nonnull)); void test(void) { char *dest = NULL; mem2(dest); } This is the warning when NULL is passed directly: <source>: In function 'void test()': <source>:6:6: warning: argument 1 null where non-null expected [-Wnonnull] 6 | mem2(NULL); | ~~~~^~~~~~ <source>:2:8: note: in a call to function 'void* mem2(void*)' declared 'nonnull' 2 | void * mem2(void *dest) __attribute__((nonnull)); | ^~~~ Compiler returned: 0