<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/138257>138257</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Statement expressions allow jumping past initialization
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
AaronBallman
</td>
</tr>
</table>
<pre>
In C++, both Clang and GCC diagnose when a jump statement will jump over an initialization. However, statement expressions seem to be allowed to do so:
```
void f(void) {
for (int i=({ goto ouch; int x = 10; x;});i<0;++i)
ouch:
;
}
void g(void) {
({
goto ouch;
int i = 12;
});
ouch:
;
}
```
https://godbolt.org/z/Eda59KqPT
It's possible that this is intentional given that statement expressions tend to be hidden behind macros, but this seems inconsistent and somewhat dangerous to allow.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJxsU8tu2zoQ_ZrRZhBDGtkWvdDCj6vboJsC7Q9Q4lhiQJGuSNlpvr4g5SZNGoOAyXmcczQP6b3uLXMNmwNsTpmcw-Cmei8nZw_SmFHarHXqV_1o8Qh0SOeIrQsDHo20PUqr8P_jEZWWvXWe8TawRYlP83hBH2TgkW3AmzZmsbkrTygtaquDlka_yKCdXeEXd-MrTxH-LY2fLxN7r5316JlHDA5bRmmMu7GKL-XQOyj3kO9hm99Pvr86rfAMJOIFaIdQHfD1F4PzPZ7dhEBC24AayhOQiFG9Cw7d3A1QHjD6nhHKExZ5fD9DeYDqBLSD8qChPEbrUhgdjQl4SU4UGN35PqYkV9LVf9C1BC7s6Y7vRfwxJqGLGFpwEV_F_EP9jvmv0gwhXHyMoQao6Z1qnQkrN_VAzQtQ85-Sm93Xn99-LIiPAajyeHHe69YwhkEGDIP2GI8NbGP_pMFeX9ku7s8bGNiqewMHrRRbbHnQVuEou8n5NFjzHTs2O8J3znrtI0maNO9GvkUGJW3Pk5t9BEzjsMpUXapduZMZ10W13haiqoo8G-quK7ekRFvK9XkrBIt8rdbiXKhyU6zPVGS6ppw2-SangnJBu1UpWHTFWVbVTqiKOljnPEptVsZcx1iqTHs_c12UgjZVZmTLxqcdIrJ8w-QForhSUx2THtq597DOjfbBv8EEHQzX3z8tV_qqtDPa9niRPnzYmWyeTP2hmzoMc7vq3AjURJb738Nlck_cBaAmafNAzV38tabfAQAA__-NOD_p">