[Bug analyzer/108403] New: -Wanalyzer-null-dereference false negative with *q == 0
mengli.ming at outlook dot com
gcc-bugzilla@gcc.gnu.org
Sat Jan 14 07:30:40 GMT 2023
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108403
Bug ID: 108403
Summary: -Wanalyzer-null-dereference false negative with *q ==
0
Product: gcc
Version: 13.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: analyzer
Assignee: dmalcolm at gcc dot gnu.org
Reporter: mengli.ming at outlook dot com
Target Milestone: ---
I got a false negative error when compiling the following program with
gcc(trunk) `-O0 -fanalyzer` in https://godbolt.org/z/4f7e3z8dE.
In this case, after entering the first if branch, the result of eval on line 10
is TRUE. At this time, the fact known to the analyzer is that the pointer `q`
is NULL, and then, for `*q == 0` on line 11, analyzer does not generate an NPD
warning, which is a little odd.
Here is the analysis results of the case. Thank you for taking the time to
review this case.
Input:
```c
#include "stdio.h"
void __analyzer_eval(int);
int *f(int *);
int *f(int *q)
{
__analyzer_eval(q == 0);
if (q == 0)
{
__analyzer_eval(q == 0);
if (*q == 0)
{
printf("Hello World!");
}
}
}
```
Output:
```bash
<source>: In function 'f':
<source>:7:5: warning: UNKNOWN
7 | __analyzer_eval(q == 0);
| ^~~~~~~~~~~~~~~~~~~~~~~
<source>:10:9: warning: TRUE
10 | __analyzer_eval(q == 0);
| ^~~~~~~~~~~~~~~~~~~~~~~
```
More information about the Gcc-bugs
mailing list