https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109251
Bug ID: 109251 Summary: -Wanalyzer-deref-before-check false positives seen in Linux kernel due to check in macros Product: gcc Version: 13.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: analyzer Assignee: dmalcolm at gcc dot gnu.org Reporter: dmalcolm at gcc dot gnu.org Target Milestone: --- Created attachment 54734 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=54734&action=edit Reduced reproducer The attached triggers a false positive from -Wanalyzer-deref-before-check: https://godbolt.org/z/TsrnedsWP <source>: In function 'sched_slice': <source>:50:25: warning: check of 'se' for NULL after already dereferencing it [-Wanalyzer-deref-before-check] 50 | for_each_sched_entity(se) { | ^~ <source>:32:10: note: in definition of macro 'for_each_sched_entity' 32 | for (; se; se = NULL) | ^~ 'sched_slice': event 1 | | 48 | slice = __sched_period(nr_running + !se->on_rq); | | ~~^~~~~~~ | | | | | (1) pointer 'se' is dereferenced here | 'sched_slice': event 2 | | 50 | for_each_sched_entity(se) { | | ^~ | | | | | (2) pointer 'se' is checked for NULL here but it was already dereferenced at (1) <source>:32:10: note: in definition of macro 'for_each_sched_entity' | 32 | for (; se; se = NULL) | | ^~ | Looks similar to PR 108745, but that one's marked as fixed, whereas this one is still firing.