<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/110251>110251</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
asm goto wrong output at `-O0`
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
fuhsnn
</td>
</tr>
</table>
<pre>
Godbolt: https://godbolt.org/z/3a1vYMaoq
```
void asm_goto_output(int *arg) {
asm goto (
" subl $11, %[value];"
" cmpl $11, %[value]; je %l[label];"
: [value]"+r"(*arg)
:
: "cc"
: label
);
label:
return;
}
int main(void) {
int i = 22;
asm_goto_output(&i);
return i;
}
```
The output should be `11`, yet clang at `-O0` stores `0` to the pointed-to variable.
Looks like only the jump branch is buggy, if input is changed to another value and the fall-through path is taken, the output is correct.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJx8U0tv2zAM_jX0hUhg0e-DD0mD7LJhl112KmRbsdUqkqdHiuzXD3LSNk2LAUFkifweIkXunBy1EC0UWyh2CQ9-MrY9hMlpnXRmOLffzNAZ5SHb4OT97CDbAO2B9uMlsDZ2BNr_BdpnnJ1-_-DmD6Q7SDdQptffsj0ZOSB3x8fRePNogp-DB6ql9gi04ZGlQai2l2yMqRhTEah-PUMEIkQXOoVAOWNADwhUQLE9cRUEFDvItkB0B-iP8_8A-CTioYJiq3gn1Fc02QZvQURAW7ss9Zv9D-l3WKK-_8R4Ubvx2kTd6_4SfCeywger3xKg2l0_lv9YxyOXGqiOlb4rZoxKhGyHRDcSn9sBVMqPNi6yKL8Q_tjgX5PACw-6yQQ1YCcQypSxmEIPeBYee8X1iNzHwOpnBKPzxgoXD5atN-gngbOR2oth5Q2euJW8U2J9e9_vxjw7VPJZoNHqvGCewnHGznLdTygddmEcz1FYHlDq6Es67CeuRzFEGa6Nn4TFpanI9bCQHLhSKz9ZE8YJZ-4XKs-fhY5U_v2SkcxYK3q_ToY2G5qs4YloWUVVnjV1WSdTe2iqoqQyr2pe1KxjvCm7oWdleaipFJwS2VJKedpQxYhyKtd9PuRDVfKCdSQO_QHyVBy5VGulTsc4bIl0LoiWsZQKliyPxC3zS6TFCy7R-NCKXWLbCFp1YXSQp0o6795pvPRKtG9T9mKNHl-vdtufJFjV3o2-9FPo1r05Au0j4XVZzdY8id4D7RcbDmh_9Xlq6V8AAAD__1iJR0w">