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

    <tr>
        <th>Summary</th>
        <td>
            __builtin_memcpy/set_inline are broken with msan
        </td>
    </tr>

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

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

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

<pre>
    The following program produces a false msan warning:
```
#include <sanitizer/msan_interface.h>
int main(int argc, char** argv) {
        char buf[SIZE];
        __builtin_memset_inline(buf, argc, SIZE);
        __msan_check_mem_is_initialized(buf, SIZE);
}
```

```
$ clang memset.c -fsanitize=memory -g -O0 -DSIZE=16 && ./a.out
Uninitialized bytes in __msan_check_mem_is_initialized at offset 0 inside [0x7ffc5694e820, 16)
==2658485==WARNING: MemorySanitizer: use-of-uninitialized-value
    #0 0x4a9de5 in main memset.c:6:3
    #1 0x7f9aefcc27fc in __libc_start_main csu/../csu/libc-start.c:332:16
```

The warning is produced with all settings on SIZE/-O.

The following program also produces a false warning:
```
#include <sanitizer/msan_interface.h>
int main(int argc, char** argv) {
        char buf1[SIZE];
        char buf2[SIZE] = {argc};
        __builtin_memcpy_inline(buf1, buf2, SIZE);
        __msan_check_mem_is_initialized(buf1, SIZE);
}
```

```
$ clang memcpy.c -fsanitize=memory -g -O2 -DSIZE=9 && ./a.out
Uninitialized bytes in __msan_check_mem_is_initialized at offset 0 inside [0x7ffcbd03b2c8, 9)
==2658813==WARNING: MemorySanitizer: use-of-uninitialized-value
    #0 0x4a9d37 in main memcpy.c:7:3
    #1 0x7f9f8f9697fc in __libc_start_main csu/../csu/libc-start.c:332:16
```

The warning is produced for all SIZEs with -O0 and for SIZE>8 with -O2.

These programs must not produce a warning.

```
clang version 16.0.0 (https://github.com/llvm/llvm-project.git fa250250b2966613fba7b88575029eb7cf0da66c)
```

@melver @eugenis @vitalybuka @kda @gchatelet
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzNVU2P2zYQ_TXyZSCBIiVKOuiwG-8GOTQBmhYFejFIipIZ09JCpLxxf32Hkr3ebLwpin4kBm1RHM7Mm8d5tByaY_3LVkM7WDs8mr6Dh3HoRrEPz2ZS2oGAVlinYe9ED49i7HFXxG4iso7ITcTJaSyvlJle2anRELE36GC8-UOPEb0P3hvTez22QulkG7G7xQXXYC9MH9EyTMXYqYi-AbUV6IYBb8LSIaIVRMXtKQupghnk1Eb57cd3v99F-TpiF-tmIydjvek3e7132mNia3qNKYILRj9nmX1p9eQLs_OMVW212gX_jXHoj4UIi7U0lyAvnaNifZ2U60xloKxAwheIiYK4PRMWsTWuDuMR4g7iDwTi9ZyMrVMOEeU4IEFSRTJMfon3a_8MI8ijx5MzPfxFMSA8DG2L-YHgdmfCweW35HPRtirnVaZLSkKtKQ-VLsgZcr2mPC-zMl9efrv5-f2792-xK-CnGffHp5PHpcnpeGjj6TnC-CDspE-k4wcbhwD5nImq0XkAHlriiRqMwvHLvtifQoBZCd0qRYtWLeVaI9XGeTH6zRxCuQmJSgJbyzRsiOcNc1zGKP5iea-fXNDHqe_BuLMwGng0fgvCWkCM2Gudg6E_NcV9_CF5GeJriaGshq919qNJLL2usbOZXswIaB1CzAmK1xWpHo5fKDINaOZQ_0SS6b-rSQT5LU3Siyar_0-SsiFMUlWGUqsriixT9h8okhXPFTkTg1GK1xTZlm3Fq--hyHYYZ0GGg3GLPsPtKfrFtJzXXXm20JcaRfWdtOlgPzkP_eDP0VGfp5TJN1poaZ-DHp3ByyDlCUkIUlNuvX9wQdL0HkeH-SeZqGEfyreH8yPGXJ-08gluwNuA5gSHpBXnPGWtFIUsy7zA1UrLQrWkEZyrSxtcbfGM7LVFQIAzPXW6R8JwejBe2KOcdiK87Zr50aGovbbar3Sdck5Slhc0XTU1aypWiZU33ur6pZYR_OU_Fq8SDXIcdrpfaA7NvppGW_89CvDVODdph5O8IFm52taK6TwvCplKTZuSs7whgmeKq5I3qZR6ZYXU1tUol4jSXj_CHALneDmtTE0JpaRMSUqzMksTlotC5IUqMlFyQVggCDvUJgFHMozdaqxnSHLqHBqtcd5djMI50_Vaz-kwvpj8dhjr5nCcdsNhNaeuZ-h_ArpR1Wk">