<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">