<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/116421>116421</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
unix.StdCLibraryFunctions analysis regression
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
avlouis
</td>
</tr>
</table>
<pre>
There seems to be a regression in the `unix.StdCLibraryFunctions` analysis check.
Found below is code for a small example. Running `clang --analyze sendto.c` produces warnings such as the following:
```
sendto.c:20:3: warning: The 1st argument to 'sendto' is -1 but should be >= 0 [unix.StdCLibraryFunctions]
20 | sendto(sockfd, NULL, 0, 0, NULL, 0);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
```
This happens for versions 19.1.2 and 19.1.3 but not 18.1.8. All acquired via this Github project.
It seems the analysis pass believes `some_function_outside_tu` can set `sockfd` to `-1` as removing the call to it or adding `if(0 > sockfd) return 1;` between it and the call to `sendto` resolves this warning. `some_function_outside_tu` should not be able to modify `sockfd` since the implementation is in a different translation unit and `sockfd` is `static`.
Here is the code for `sendto.c`:
```
#include <arpa/inet.h>
#include <sys/socket.h>
#include <stddef.h>
static int sockfd = -1;
void some_function_outside_tu(); // declared here, but implementation
// is outside this translation unit
int main(int argc, const char* argv[]) {
(void)argc; (void)argv;
sockfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if(0 > sockfd) {
return 1;
}
some_function_outside_tu(); // this causes issues
sendto(sockfd, NULL, 0, 0, NULL, 0);
}
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJycVU1z4jgQ_TXi0oXLksHggw8khNnUZiepTOZMCanB2hESK8lksof97Vtt8zmV7GwNRRljS6-7X7_XkjGajUOs2fiGjecD2abGh1rurW9NHKy8fqtfGgwIEXEbIXlYIUgIuAkYo_EOjIPUILAyb535nn1J-vbBrIIMb4vWqWS8i6zMQTpp36KJoBpU3zKWz1k-W_jWaVih9a9Ar7xGWPsAEuJWWgv4XW53FjOA59Y54zYURlnpNjAcdoh_U2ZOJ58pirILXrcKI7zKQOsjxFY1IGOX49pb61-N27Bi1ifAyvzw7f6eoIqZyFkxK1gxO0LR7UuDwGMCGTbtFl0iPpiY9NuYmFARQw6rNkFsfGupNmDFHSvmkAMb33xM0XjepwAAIgc2uYUj6jR69W2tmbiFz18fHug3P10unlSsuDlhAHQYbHz3z08_71LRX18aE6GRux262HVmj4G6HoFXGc8ESKf726Kr2vkEfJrxbJoBzKwFqf5qTUANeyMhEdonk5p2RZ36E1XKLqPdp6PMGjwLZidjJI0Y3GMkAUS_xeX6wNzStykajcvUkgCUdBAx9cs62sq861KZD3mnwwgBt35PYqIwinSWPJgEJDytDyozayamOTUPjvxXEDC1wQEnpsscVpheER3tJR4u4Sh-378yh4DRW0q-I-Cgpwx-VstBQsQpmW5lkZC3Xpv123WB0TiFXXxDfiFpytSZM5I_JWizXmPoFBuki7Z_27pD5ldgpieZEMhTVx36jUaB6Rt0cuup1s6DZ2-9KytRGKdsq8kXtzLsJBML4zBlDfnknTXxLTKxoPT-a1HSGteXr3s_d0WAcenQRCAnDvnJKf11742GDzshpr23gIkFEwvQqKwkSdNcJO-R8K95P4JXp-9xs4lwgO7F8GM7LtOitLfSOCamdCvDRlE45V1MoBoZmJjR030_vEmgbHIaAUxMqS4mqm5jl__Fk_0PHFwS1JPNxHS2WN5_vnuhqF8eb39fzj89z_6gf_dPT8-PL4_Lr_On68Hzrm3OWV0a6JjnZH6Vx_9vREegkm3ECCbGFuMJ4pdH5zmbo24Hui50VVRygDWfFLysJiNRDZq6ylXBlSy4LieqGI24qEa6FEKLNUcU5cDUIhcjzvmYV3kxmmRSKynVFPNqOhIcV2yU41Yam1m732Y-bAZdGTXn5UjwgZUrtLE7moVw-NoXyYSgkzrUtGm4ajeRjXJrYopnmGSSxfrDw-Y8W8_n-KANtm5S2kUycEfwppvUmfJbJhaEffgZHmY3ObenXSwOKe9r8W8AAAD__x8zlkA">