<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/62181>62181</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
clang static analyzer make an imprecise assumption for `x > 0`
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
hallo-wereld
</td>
</tr>
</table>
<pre>
version: clang trunk
args: `--analyze -Xclang -analyzer-stats -Xclang -analyzer-checker=core,debug.ExprInspection -Xanalyzer -analyzer-constraints=z3 --analyzer-output text`
For this case, where `x` is never 0, however, the analyzer makes an imprecise assumption: "assuming 'x' is 0".
input:
```c
extern void clang_analyzer_explain();
int foo(int *p)
{
unsigned x = (unsigned)p;
x = x * x + 1;
clang_analyzer_explain(x);
if (x)
{
return x;
}
else
{
int *q = (int *)x;
return *q;
}
}
```
output:
```console
7:5: warning: symbol of type 'unsigned int' conjured at statement 'x * x + 1' [debug.ExprInspection]
clang_analyzer_explain(x);
^~~~~~~~~~~~~~~~~~~~~~~~~
7:5: note: symbol of type 'unsigned int' conjured at statement 'x * x + 1'
clang_analyzer_explain(x);
4:5: note: Value assigned to 'x'
x = x * x + 1;
^~~~~~~~~~~~~
5:9: note: Assuming 'x' is 0
if (x)
^
5:5: note: Taking false branch
if (x)
^
11:9: note: 'q' initialized to a null pointer value
int *q = (int *)x;
^~~~~~
12:16: note: Dereference of null pointer (loaded from variable 'q')
return *q;
^~
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJysVc2O4zYMfhrmQiSw5fjv4EOmmQC9F8XeFrJNx9pRJK8kZzx72GcvZMdJnGaKXaBGoEgk9fEjRYLcWnFURAXELxDvV7x3rTZFy6XU63cyJOtVqeuP4kzGCq0g2mEluTqiM716g2APwY6bo_UKSIL1misuP34Qrr9MdrPArK3jzj6RVy1Vb2Qg2lfaELA_air74-Z16MyfynZUOaEVrr_MF-6vamWd4UI5C9H-R4Trm073rusdOhocJMHEdFoP2qBrhcWKW-8P31sy5OkPkAQoLCo6k8HA61r97g9-61rCK4kTfyOLXKE4dYYqYQm5tf2pc5c0AWOjQKgjAksHYKmHDoCxzT0bobreQbS7l3nC46-azjQ4MgrPWtRT-r_OPL7S0EkuFLAMWA7RyxLaYaM1sMzvgO06bzMZpBdLRMRejVVQ44AQ7RFYNkuA5d0V1JtOFoMHG9cXDBf6T9kN9_RQNDjLrlcXlPxnyPVG4bBwAOn-diBp6RnAJdzvcziXM7B8CXbnxZvfdFcvt838JPcJnmrs08fTymp5IZhCtIt9Xbxzo4Q6-q39OJVaom7QfXTkq-T6EkI5XzCVVt96QzVyh75_6ERjKOnyBViKEL886xuI97_9OBC__vzke4hFaUf_cyAXDr9GdVq3j3T-5rIf23Gi4PTcgL9exw85mBTeSX7vaPe0wa8gz6r8An4DXDD_i795uIZLS1garqr2P-CuOGH4yAxY-n0kpIQTXIofUx44ql5K7LRQjgyefaKW3H6ndeYkXUgwiHZhcs9iT4YaMqQq8sWx8A0sk5rXVGNj9AnP3AheSpqZ_ytpz_s0fv350HWruojqPMr5ioowycI0isMgW7VFud1u67TK4zDcboOgruKoYXmSJ3VSNUkSrUTBAhYF2zANWZSxbJOV9ZbqPOFx1jRxlME2oBMXciPl-bTR5rgS1vZUJCzMwpXkJUk7TlLGFL3jqATG_GA1hb-zLvujhW0ghXX2huKEk1RMc9E3h6iWc-azMYONNuPYQohecQy-N7Jonev8QAZ2AHY4Ctf25abSJ2AH7_Lyt-6M_kaVA3YYiVpghzGQfwIAAP__f1xfdQ">