<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/134353>134353</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[clang] Missing diagnostic when initializing a member variable using uninitialized member variable
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
horenmar
</td>
</tr>
</table>
<pre>
I recently found an `-Wreorder` adjacent issue that does not get diagnosed. In the `test_t` struct below, we initialize `bar` using `foo` member variable, but because `foo` is declared after `bar`, we are reading it before initialization. (this can happen e.g. by reordering the member without noticing the dependency).
```cpp
struct test_t {
int bar{ foo + 1 };
int foo{ 3 };
};
int main() {
test_t t{};
}
```
[CE link](https://godbolt.org/z/W7zMva9x7)
Ideally this would also be caught under `-Wreorder` or by `-Wuninitialized`.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJxcU02P4ygQ_TX4UmqLgB3bBx-SyUbqw5znuCpDxaaXQAQ42fSvX-G4N-mWLBnq89XjFcZoRkfUs3rP6kOBc5p86CcfyJ0xFIPX9_4dAilyyd7h5GenAR2wLX_7E8gHTYFtOaD-wBwDJsaZIE2YQHuK4HyCkRJog6PzkXQJ7w7SRLlEopj-Tjk_pjCrBANZf2PiF9wIjDPJoDWfS-iAS585Gjfm-8n7fD_TeaAAVwwGB0s5dZhzHYVzpJdAE0GTshhIA54ShWfRtR8GgkCocwOTS5x8eEGByXhXAhNtmkwEhQ4mvFzIAZVjCcMdVjpyfp5vhXYzafJzykQY9eXTdCGnyak7E13J-C5_W_741OXC-G5l5EERsGbP-A7AuAQZdbOHk_fAxB42wJoDk4s_u_PAzR7k0_w88F2OOKNxTLRMdP_Xha9GKVteE1-A5XO9__UXWOP-YfWBiXZK6RKZ3DFxZOI4ej14m0ofRiaOn0wc_zSfv6_Y_dsw0T0AvGtCa--wsHjzs9WANnoYCBTO45RgdvrxPN8U5kPmeLHO7qkNzba8LHQvdSc7LKjfNJVsatHKtph6fdpIwVuJslK8a2rcCD5Umtq6auutwsL0gouaV7ziTdVs2rLZyFa1sm2k2Lay46zidEZjS2uv5zxYsSi838hK1rKwOJCNy_oIoSy6kQmRNyn0OeFtmMfIKm5NTPFZIplkl517ZNQH-G3ioux1TZJRcJvIPeWXnfhT7us6fOPjZ0wxB9v_eCaTpnkolT8zccyg1t_bJfgPUomJ4zJkZOK4znntxX8BAAD__6auU5w">