<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/124238>124238</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            ASan breaks __seg_gs
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          glandium
      </td>
    </tr>
</table>

<pre>
    Take this source:
```
#include <cstdint>
void test(uintptr_t addr) {
    __builtin_memcpy((void __seg_gs*)addr, "x", 1);
}
```
It compiles to
```
test(unsigned long):
        push    rbp
        mov     rbp, rsp
        mov     qword ptr [rbp - 8], rdi
        mov     rax, qword ptr [rbp - 8]
        mov byte ptr gs:[rax], 120
        pop     rbp
        ret
```
Or even
```
test(unsigned long):
        mov     byte ptr gs:[rdi], 120
 ret
```
Without ASan, but with ASan:
```
test(unsigned long):
 push    rbp
        mov     rbp, rsp
        sub     rsp, 16
        mov qword ptr [rbp - 8], rdi
        mov     rdi, qword ptr [rbp - 8]
 lea     rsi, [rip + .str]
        mov     edx, 1
        call __asan_memcpy@PLT
        add     rsp, 16
        pop     rbp
 ret
```

The `gs:` addressing is gone.

Funnily enough, with `-O` + ASan, it compiles to the same thing as without ASan.

Obligatory godbolt link: https://godbolt.org/z/8hWGxdc3P
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJycVE1v4zYQ_TWjyyAGTVqWddBBTuqiQIEs0AB7FCiRlthQpMoPx-6vLyjbu4m926IRDNDgmzfzho8c7r3qjZQV5FvInzIew2Bd1WtuhIpj1lpxql74q8QwKI_eRtdJYDWQGtbk8iM1UKZMp6OQCOyx80EoE4D9AqQ-WCUwSB-AbqIyYQquCciFcEBLhGILpEZEbJo2Kh2UaUY5dtMJ6AboZmY3jZd903ugNdDyTH1EoPQIlKa_S6AlsJQJiqcbab8F7Ow4KS09BnsDXnWZ-RQEamv6OVd9UZW-Kfohra6d3u2O9oDXXfqIzv8I_OvNOoFTcAj51rUTPuAG8qeZINSPsvFjAn_G-0hoT0HOQb1PivNtYp-zLyl534Gd8L4DJ8PNcTw7lAdpPnNI1wbuNQn1UdN92a8qDDYGrP_gJgW2MeCbCsN54-6y_bueT7jlY3sG_Qwu1zfE_--iUP_hopb8UnKOTLiaEOgWFz64e6vTJ8XxfNm_Qx3XGpuGe_7t2azIl99f3oVwIX7a3M29uHcGSP0ySIQ1Odu5JvPLld4r06Py2FsjF-fAXTRG6RNKY2M_pFqzh7AmD8-JmJq7Oqw-PEoMg0TPx3nImB65n6nXK3HJ_9xq1fNg3Ql7K1qrA2plXoHVOIQwzfroDujugi6s64Hu_ga62wxffz2Kjn3JRMVEyUqeyWpZsKIgqzwvs6Hq9iLPcyFFsVyJVjBZrFlR8HLP9utyv9xkqqKE5mRJV6RYUVYuSlbmYkP4nnZsv98zWBE5cqUXWh_GVDtT3kdZLemKsk2meSu1n8cspUa-4Yym-ZU_Za5KpIc29h5WRCsf_Pc0QQUtq3QQ2DrJX_23eZhFp6ub3lUYYrvo7Ah0l1JclofJ2T9lF4Du5sIe6O6i7FDRfwIAAP__yQK5cw">