<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/132578>132578</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[Clang 20.1.0] Missed strlen when cmp to NUL forwards with increments
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
BreadTom
</td>
</tr>
</table>
<pre>
https://godbolt.org/z/adf71b63Y
f1() should optimized to f0(). f0() should call strlen just like GCC 14.2.
C code
'''
#include <stddef.h>
size_t f0(char *str){
size_t i = 0;
for(; str[i] != '\0'; ++i){
}
return i;
}
size_t f1(char *str, size_t inc){
if(inc < 2)
__builtin_unreachable();
if(str[0] == '\0')
return 0;
size_t i = 0;
for(;; i += inc){
for(size_t n = 0; n < inc; ++n){
if(str[i+n] == '\0'){
return i+n;
}
}
}
return i;
}
'''
Bug also reported at https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119431
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJx0VEGT6yYM_jXyhXkeEHYcH3yInbqXtqf20FMGA7F5JSYD-O10f30Hx5u8ZLuZzCCDJL7vk5AIwYyz1g2ULZTHTCxxcr5pvRbqT3fJBqf-baYYrwH4AbAH7EenBmdj7vwI2L8D9kKdKzbs-N9AD2cGuAesSZjcYhVx12gu5l0rEh0509thfrc-3KSwloTorZ7J9yVEYs0_mvzadYQVOeZADx2RTmmgB8Bq-yebm1naRWkCvAtRKX3OJ-C_pDN6COZdn-LtMjkJTwAPIXrAGqoW6IEQQjYfQ4AfCQW-7p-dT_h4mzBB2RoojwSQJZ90c9nRtPCWALaArbmn3LJCddwsr-PiZ2JumW_7P0Fjr9C6O6JZPgE1Z8C9mWViSjAd3fbT73QaFmOjmU_L7LWQkxisvim8MVqjb2ToSoYfX8g8JdxQf-jxlU6EPKRKaphVD378BP7hueWZ73lWs1sj7nrOn4LvCnwUJDl9xeNT5FMhUiR_9XgU7Plrs_63ij81YruMRNjgiNdX56NWRETy8m6kzMd52d7NsIzvxloB2IfJvZ2GZczlaID3RgE_MlYXnGWq4armtch0w6oCd_WO7XfZ1NRcKCX3oi53uuaqqs9CDyjYvtrLipdDZhqkWFKOnCLb4S4vCil5VVHJBqHZUEBB9UUYm1v745IwZSaERTeMY1ntMysGbcM6FRClFfMIiGlA-CYFfBuWMUBBrQkxPFJEE-06SroUQZDmLF-77XcTglYfD_xt0jORl2saCX_89VtqjDfhVSBvJk6pEby-6DmGbPH2dfiYOC1DLt0FsE_3bsu3q3fftYyA_cojAPYblR8N_hcAAP__l7ZcfQ">