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.