https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119169
Bug ID: 119169 Summary: [[gnu::nonnull_if_nonzero]] False negative of -Wanalyzer-possible-null-argument with nonzero integer constant expression Product: gcc Version: 15.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: analyzer Assignee: dmalcolm at gcc dot gnu.org Reporter: alx at kernel dot org Target Milestone: --- The most basic code that should trigger a -Wanalyzer-possible-null-argument diagnostic with [[gnu::nonnull]], doesn't. For comparison, similar [[gnu::nonnull]] code does diagnose. alx@devuan:~/tmp$ cat nonzero.c | grep -Tn ^ 1: #include <stdlib.h> 2: 3: [[gnu::nonnull]] 4: void f(void *); 5: [[gnu::nonnull_if_nonzero(1, 2)]] 6: void g(void *, int); 7: 8: int 9: main(void) 10: { 11: void *p; 12: 13: p = malloc(1); 14: f(p); // -Wanalyzer-possible-null-argument 15: free(p); 16: 17: p = malloc(1); 18: g(p, 1); 19: free(p); 20: } alx@devuan:~/tmp$ gcc-15 -Wall -Wextra -fanalyzer -O3 -S nonzero.c nonzero.c: In function ‘main’: nonzero.c:14:9: warning: use of possibly-NULL ‘p’ where non-null expected [CWE-690] [-Wanalyzer-possible-null-argument] 14 | f(p); // -Wanalyzer-possible-null-argument | ^~~~ ‘main’: events 1-2 13 | p = malloc(1); | ^~~~~~~~~ | | | (1) this call could return NULL 14 | f(p); // -Wanalyzer-possible-null-argument | ~~~~ | | | (2) ⚠️ argument 1 (‘p’) from (1) could be NULL where non-null expected nonzero.c:4:6: note: argument 1 of ‘f’ must be non-null 4 | void f(void *); | ^ alx@devuan:~/tmp$ sed -i 14s,^,//, nonzero.c alx@devuan:~/tmp$ gcc-15 -Wall -Wextra -fanalyzer -O3 -S nonzero.c alx@devuan:~/tmp$