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

    <tr>
        <th>Summary</th>
        <td>
            libsantizer static_assert when compiling for mips64
        </td>
    </tr>

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

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

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

<pre>
    Hi

I've come over from https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105614 and https://github.com/crosstool-ng/crosstool-ng/issues/1733.

We've had a bug report of GCCs libsanitizer triggering the following static_assert
```
[ALL  ]    In file included from /home/ctng/crosstool-ng/.build/mips64-unknown-linux-gnu/src/gcc/libsanitizer/sanitizer_common/sanitizer_platform_limits_linux.cpp:21:                                                                                                         
[ERROR]    /home/ctng/crosstool-ng/.build/mips64-unknown-linux-gnu/src/gcc/libsanitizer/sanitizer_common/sanitizer_platform_limits_linux.cpp:75:38: error: static assertion failed                                                                                             
[ALL  ]       75 | COMPILER_CHECK(struct_kernel_stat_sz == sizeof(struct stat));                                                                                                                                                                                               
[ALL  ]          |                ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~               
[ALL  ]    /home/ctng/crosstool-ng/.build/mips64-unknown-linux-gnu/src/gcc/libsanitizer/sanitizer_common/sanitizer_internal_defs.h:332:44: note: in definition of macro 'COMPILER_CHECK'                                                                                       
[ALL  ]      332 | #define COMPILER_CHECK(pred) static_assert(pred, "")                           
[ALL  ]          |                                            ^~~~                                                                                                                                                                                                             
[ERROR]    make[5]: *** [Makefile:615: sanitizer_platform_limits_linux.lo] Error 1                                                                                                                                                                                             
[ERROR]    make[5]: *** Waiting for unfinished jobs....                                                                                
```
I reported it to GCC and was directed here

If I follow the Linux code correctly (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/mips/include/uapi/asm/stat.h) we end up with `sizeof(struct stat) == 144` for `_MIPS_SIM_NABI32`/`_MIPS_SIM_ABI32` and `sizeof(struct stat) == 104` for `_MIPS_SIM_ABI64`,

GCC's libsanitizer has 
```
#elif defined(__mips__)
const unsigned struct_kernel_stat_sz = SANITIZER_ANDROID
                                           ? FIRST_32_SECOND_64(104, 128)
                                           : FIRST_32_SECOND_64(144, 216);
const unsigned struct_kernel_stat64_sz = 104;
```

LLVM's compiler-rt/lib/sanitizer_common has
```
#elif defined(__mips__)
const unsigned struct_kernel_stat_sz = SANITIZER_ANDROID
                                           ? FIRST_32_SECOND_64(104, 128)
                                           : FIRST_32_SECOND_64(160, 216);
const unsigned struct_kernel_stat64_sz = 104;
```
Somewhere GCC and LLVM diverged. Both appear to be incorrect for mips64 and LLVM looks like it's incorrect for mips32.

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJztV99v4ygQ_mucFxTLP-PkIQ9pkt5al7arZHUr3YtFbByzIcYC3Nz2r78ZnHTTpt1rVbV7Jx1CGAwMM9_Ax7CWxffxJ-54M8ebdGXqBMktI7ncMSJvmSKlkjtSGdNoJ5w4wSXkTZ67m7p1pdpAa91u7rgQFKq6kvsM2m6-4U54yQsnnPlePPAjQuvisRRuqnbtwkrQyJXU2kgp-vXmvMm1bpmGip-EoXuq7lfW6VvRglACSxPFGqkMkSX5bTrVRPC1pjU3_A5sMYpvNkzxekNMxUgphZB7bGlDDc8zqjVT5iB_4B1y14wvJosFIU48I5DSmpRcMMLrXLQFKzqYQMMKgEMDzFN2uOuWiwIqO97oQdRv620t93Vf8Lr9qw-QIoYq7yCG8lR57DrWMwBtJ-sHvxpBTSnVLhN8x43OrEw3bxoAPPChIB-V7gGbL5c3ywNg_1ZokhiKcIj4MKWkwkq3G0i3G7gEV1PwdfExoJ3uMkhJTJxkSqY3V5_TxXyZTT_Np787wVAb1eYm2zJVM5Ghxpm-I3DeIBMNZsvyfpQ1yAlGmMOLdzXj_dNzQGEXAPV4dDJ_a47fKuElBvzK48FrA7uIiqxgpXYrPA9hAGUU4WGopWH45TWBfo6T4EQAve4o6AiKJ4_3ZvKxngdlreedILQKsvPD0igG2I0e0fzxP04NbB69fnXbdb7vfmpH_Oze-G-nJ4l_R7cMfsXQxG3kBJMuAwwXV9CH1yh0DPzYUu8_kLaQKHaOTE38X23vm9LrwPpKARYIVAAR0tZ4DHUFN9I3udYupHdS7mEIlB5iK1iXG2IkBlg2rttTTQquWI5dFVPsQUBZkvQQadmga4F-hPiywCBT4STxHQwdngWHbne3HaLMpl0jaeU7S24gAr7dgG40lEaqWyoKfRzhHn4rhrxKVV4d-BMjyi5ug1pLG47dGiUjQQADAhHsGWFgWtuQPcSpBEB45lI93rk-0OXAsw6Cb3aVfl5lq_Qqu55cpECnACIYdtpx_G8hfIF872n5IGYQWfHTU9jBN8DEj-LfChz1dHQbhEzwsmN45MRhliFSWYYxgx2Sy1ob2Huab2AEeTb-IKvJdfol_RPod3I9W96ks27-a3ZfeEku0-XqSxYG2Wo-vbmeZWBjMEQMgK79YHiv1qvETp4RG1mxgT_oIqQXGjyIjiajXsdpj5G15WLxx5V1B1y_DRCe6uP9g7f0E5czuul_L52LtXv8fby0gthrj8x1z2noMSA1eAFvWOGSCwkkQJuGUYXMt7Yvv46-7JHswrIfM4WUWzx8WxhorOfPx4fB4SnbK8ZhMQpHtGe4EWzcndnuyD4IWQjoWB_20PE26FbutUqMf_K-FuL2-Ok3Sn4DPU7f1XEcjUa9alzGeRFTeGUHZR740TCPWDkI8oTlSTkKfK8n6JoJPYY7CgKmmu2JFYHBUzzr8XHgBYEXg6dGke8lbuyHwwHLKXwHXrKOnMhjO3hLuagHEntPja1K8HDX0Cm4NvpHJxiNXmV2OZBPW1NJNc4bmm8ruuvZtcdW978BZrF0cg">