https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100546
Bug ID: 100546 Summary: -Wanayzer-null-dereference false positive through noreturn function pointer Product: gcc Version: 11.1.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: analyzer Assignee: dmalcolm at gcc dot gnu.org Reporter: andrew at ishiboo dot com Target Milestone: --- Test case: $ cat /tmp/test.cpp #include <cstdio> #include <cstdlib> static void noReturn(const char *str) __attribute__((noreturn)); static void noReturn(const char *str) { printf("%s\n", str); exit(1); } void (*noReturnPtr)(const char *str) = &noReturn; int main(int argc, char **argv) { char *str = 0; if (!str) noReturnPtr(__FILE__); return printf("%c\n", *str); } Output: $ g++-11 -fanalyzer -c /tmp/test.cpp /tmp/test.cpp: In function 'int main(int, char**)': /tmp/test.cpp:16:27: warning: dereference of NULL 'str' [CWE-476] [-Wanalyzer-null-dereference] 16 | return printf("%c\n", *str); | ^~~~ 'int main(int, char**)': events 1-4 | | 13 | char *str = 0; | | ^~~ | | | | | (1) 'str' is NULL | 14 | if (!str) | | ~~ | | | | | (2) following 'true' branch (when 'str' is NULL)... | 15 | noReturnPtr(__FILE__); | | ~~~~~~~~~~~~~~~~~~~~~ | | | | | (3) ...to here | 16 | return printf("%c\n", *str); | | ~~~~ | | | | | (4) dereference of NULL 'str' |