<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/90491>90491</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
`-Wconditional-uninitialized` false positive with vector types
</td>
</tr>
<tr>
<th>Labels</th>
<td>
vectorization,
clang:diagnostics,
false-positive
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
wheatman
</td>
</tr>
</table>
<pre>
The following code leads to what I believe is a false positive of `-Wconditional-uninitialized`
compile with `-std=c++20 -Wconditional-uninitialized -DVECTOR`
this is with current trunk (19.0 145176dc0c93566ce4aef721044d49ab8ba50f87)
```cpp
#include <array>
static constexpr int num_blocks = 8;
using data_type = float;
#ifdef VECTOR
typedef float vec_type __attribute__((vector_size(sizeof(data_type) * num_blocks)));
#else
using vec_type = std::array<data_type, num_blocks>;
#endif
vec_type load_vec(const data_type *f) {
vec_type data;
for (int i = 0; i < num_blocks; i++) {
data[i] = f[i];
}
return data;
}
vec_type foo(const data_type * f) {
return load_vec(f);
}
```
https://godbolt.org/z/e5farervq
You get the following warning
```
<source>:17:12: warning: variable 'data' may be uninitialized when used here [-Wconditional-uninitialized]
17 | return data;
| ^~~~
<source>:13:5: note: variable 'data' is declared here
13 | vec_type data;
```
Interestingly if you use it in the same function the false positive seems to go away
```cpp
static constexpr int num_blocks = 8;
using data_type = float;
typedef float vec_type __attribute__((vector_size(sizeof(data_type) * num_blocks)));
data_type sum_vec(const data_type *f) {
vec_type data;
for (int i = 0; i < num_blocks; i++) {
data[i] = f[i];
}
data_type total = 0;
for (int i = 0; i < num_blocks; i++) {
total += data[i];
}
return total;
}
data_type foo(const data_type * f) {
return sum_vec(f);
}
```
https://godbolt.org/z/dWb5KWojr
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy8Vl2PozYU_TXOy1VGYCDAQx7yMZFWfahUrbrqU2TMJXjXsVPbJM087G-vbDJARjM702pbhMyX77nn3mMfwawVB4W4JNmaZNsZ61yrzfLSInNHpmaVrq_Lzy1Co6XUF6EOwHWNIJHVFpyGS8scfIIKpcAzgrDAoGHSIpy0FU6cEXQDZBHNv3CtauGEVkzOOyWUcIJJ8YQ1WUQk2pJoxfXxJCTCRbg2xFhXk2TLCV0TuqYR_AAE5tvfHzeff_1tQOtH1wrraQVM3hmDyoEznfoGhBZx-RBBnGZxvqh5xMskWyw4pgybnMZRmtZpyaqiYlnUFDmh5Q15EfUnP51ub2giFJddjUCSDTOGXUnyOOVhHXOCA9fKOvzrZEAoB6o77iup-TcLJNlCQZJ1P7uzvtU1c2zvricMXxupmRtmjHmbGhu41d6XfD2hfxcC4Iy8x9jvmXNGVJ3D_Z7QgtDijNxps7fiCQkt_EU3hBZDXkJLIHQ14el70J8DEZqgtDjlPaT0tIOGK5Ksbl3ZTNA3U-Tk8Q5T1aKZlgojrNSs3p-RE1qEfk4bRVdNYJ3foMYoP2nIAADQaOPXgBdCBKoRSdbh9p7XGkS_Au-BA162FiTb9vrcHu5ykHw7Phh0nVEviQxTpuPAutH69TLhRZ0j_qQ9zZ1SQ6Ln9ds_ts6drNeI7gjdHXRdaeketDkQunsidIdZwwya859Tgn_oDg7owN2Zw4UZ5a-v5iHJxurOcAxSr-LcD5Qkq-cwf3tmRrBK-hLz0Ciaw5FdoUK43--XFhV0Fmto0SCQbP0ji8lGGeIcSL55Q4xesw1MDpI9fv_-_fUSEpKsMk9baYdv0RcWauSSmRvXkUky5Hp9lb5s4GT8pBwatE6og7yCaOCqO98OEA6ECrJYdkRoOsV9R3qh7p3ZIh6Dix80sAu7vulu_6GD_c9mNTWUkZztjh_2kzfF-gmWEo5_6CsjV6cdk0PWn0bqBkvXPnRC7l2fC4HvGd1I_1843ajbh4zuY3ZXf6myX77or2YaNKuXSV0mJZvhMs7jNI3yMo1n7bJYxGWS5VGTlWXTFGnMMpYxVjY5LUvG4plY0oimUUrLeEGzNHooimyBWFSLol4URR6RNMIjE_JByvPR85gJaztcllFaxjPJKpQ2_J9R2m8B8cT8jiaUErohlHLJgnfWgh2Utk5wO3wLO37-vOP962w7M0ufal51B0vSSArr7JjcCSdx-e4f20svCf9XPT_wwtlZZ-TyRa-Fa7vqgesjoTuf8HaZn4z-itwRugulW0J3ofq_AwAA___yEyeW">