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

    <tr>
        <th>Summary</th>
        <td>
            `-Warray-bounds=` warning compiling `lvm-project/llvm/lib/Target/AArch64/MCTargetDesc/AArch64ELFStreamer.cpp`
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            backend:AArch64,
            code-quality
      </td>
    </tr>

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

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

<pre>
    ```
In file included from /usr/include/c++/14.2.1/algorithm:60,
                 from /home/user/CLionProjects/llvm-project/llvm/include/llvm/ADT/SmallVector.h:18,
                 from /home/user/CLionProjects/llvm-project/llvm/include/llvm/MC/MCELFStreamer.h:12,
                 from /home/user/CLionProjects/llvm-project/llvm/lib/Target/AArch64/MCTargetDesc/AArch64ELFStreamer.h:16,
                 from /home/user/CLionProjects/llvm-project/llvm/lib/Target/AArch64/MCTargetDesc/AArch64ELFStreamer.cpp:15:
In static member function ‘static _Up* std::__copy_move<_IsMove, true, std::random_access_iterator_tag>::__copy_m(_Tp*, _Tp*, _Up*) [with _Tp = const llvm::MCSymbol*; _Up = const llvm::MCSymbol*; bool _IsMove = true]’,
    inlined from ‘_OI std::__copy_move_a2(_II, _II, _OI) [with bool _IsMove = true; _II = const llvm::MCSymbol**; _OI = const llvm::MCSymbol**]’ at /usr/include/c++/14.2.1/bits/stl_algobase.h:521:30,
    inlined from ‘_OI std::__copy_move_a1(_II, _II, _OI) [with bool _IsMove = true; _II = const llvm::MCSymbol**; _OI = const llvm::MCSymbol**]’ at /usr/include/c++/14.2.1/bits/stl_algobase.h:548:42,
    inlined from ‘_OI std::__copy_move_a(_II, _II, _OI) [with bool _IsMove = true; _II = const llvm::MCSymbol**; _OI = const llvm::MCSymbol**]’ at /usr/include/c++/14.2.1/bits/stl_algobase.h:555:31,
    inlined from ‘_OI std::move(_II, _II, _OI) [with _II = const llvm::MCSymbol**; _OI = const llvm::MCSymbol**]’ at /usr/include/c++/14.2.1/bits/stl_algobase.h:683:38,
    inlined from ‘llvm::SmallVectorImpl<T>& llvm::SmallVectorImpl<T>::operator=(llvm::SmallVectorImpl<T>&&) [with T = const llvm::MCSymbol*]’ at /home/user/CLionProjects/llvm-project/llvm/include/llvm/ADT/SmallVector.h:1070:25,
    inlined from ‘virtual void llvm::AArch64TargetELFStreamer::finish()’ at /home/user/CLionProjects/llvm-project/llvm/lib/Target/AArch64/MCTargetDesc/AArch64ELFStreamer.cpp:499:31:
/usr/include/c++/14.2.1/bits/stl_algobase.h:452:30: warning: ‘void* __builtin_memmove(void*, const void*, long unsigned int)’ offset [16, 24] is out of the bounds [0, 16] of object ‘NewSyms’ with type ‘llvm::SmallVector<const llvm::MCSymbol*, 0>’ [-Warray-bounds=]
  452 |             __builtin_memmove(__result, __first, sizeof(_Tp) * _Num);
      |             ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/user/CLionProjects/llvm-project/llvm/lib/Target/AArch64/MCTargetDesc/AArch64ELFStreamer.cpp: In member function ‘virtual void llvm::AArch64TargetELFStreamer::finish()’:
/home/user/CLionProjects/llvm-project/llvm/lib/Target/AArch64/MCTargetDesc/AArch64ELFStreamer.cpp:475:40: note: ‘NewSyms’ declared here
  475 |       SmallVector<const MCSymbol *, 0> NewSyms;
      |                                        ^~~~~~~
In static member function ‘static _Up* std::__copy_move<_IsMove, true, std::random_access_iterator_tag>::__copy_m(_Tp*, _Tp*, _Up*) [with _Tp = const llvm::MCSymbol*; _Up = const llvm::MCSymbol*; bool _IsMove = true]’,
    inlined from ‘_OI std::__copy_move_a2(_II, _II, _OI) [with bool _IsMove = true; _II = const llvm::MCSymbol**; _OI = const llvm::MCSymbol**]’ at /usr/include/c++/14.2.1/bits/stl_algobase.h:521:30,
    inlined from ‘_OI std::__copy_move_a1(_II, _II, _OI) [with bool _IsMove = true; _II = const llvm::MCSymbol**; _OI = const llvm::MCSymbol**]’ at /usr/include/c++/14.2.1/bits/stl_algobase.h:548:42,
    inlined from ‘_OI std::__copy_move_a(_II, _II, _OI) [with bool _IsMove = true; _II = const llvm::MCSymbol**; _OI = const llvm::MCSymbol**]’ at /usr/include/c++/14.2.1/bits/stl_algobase.h:555:31,
    inlined from ‘_OI std::move(_II, _II, _OI) [with _II = const llvm::MCSymbol**; _OI = const llvm::MCSymbol**]’ at /usr/include/c++/14.2.1/bits/stl_algobase.h:683:38,
    inlined from ‘llvm::SmallVectorImpl<T>& llvm::SmallVectorImpl<T>::operator=(llvm::SmallVectorImpl<T>&&) [with T = const llvm::MCSymbol*]’ at /home/user/CLionProjects/llvm-project/llvm/include/llvm/ADT/SmallVector.h:1093:14,
    inlined from ‘virtual void llvm::AArch64TargetELFStreamer::finish()’ at /home/user/CLionProjects/llvm-project/llvm/lib/Target/AArch64/MCTargetDesc/AArch64ELFStreamer.cpp:499:31:
/usr/include/c++/14.2.1/bits/stl_algobase.h:452:30: warning: ‘void* __builtin_memmove(void*, const void*, long unsigned int)’ offset [16, 24] is out of the bounds [0, 16] of object ‘NewSyms’ with type ‘llvm::SmallVector<const llvm::MCSymbol*, 0>’ [-Warray-bounds=]
  452 |             __builtin_memmove(__result, __first, sizeof(_Tp) * _Num);
      |             ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/user/CLionProjects/llvm-project/llvm/lib/Target/AArch64/MCTargetDesc/AArch64ELFStreamer.cpp: In member function ‘virtual void llvm::AArch64TargetELFStreamer::finish()’:
/home/user/CLionProjects/llvm-project/llvm/lib/Target/AArch64/MCTargetDesc/AArch64ELFStreamer.cpp:475:40: note: ‘NewSyms’ declared here
  475 |       SmallVector<const MCSymbol *, 0> NewSyms;
      |                                        ^~~~~~~
```

I am using `gcc (GCC) 14.2.1 20240910` on Manjaro Linux.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzsWV9vo7gX_TTOi9XI2EDggQdKmp8iTWd-Uju7j8iACZ41dtY27WYf9rOvbEiTTLuT7vzZGY2CUOPY5l7fw7n3nirUGL6RjGUgugbRckYH2ymdtVyzR_rAZpVqdhmI0XSjfC1hywWDXNZiaFgDW616CPBqMBrg1TQN8KoG-NrfqyCc43kA8IqKjdLcdj0geYwALgDK4cfX3l6neubNMme3eMOV_L9WH1htDcArIR76q-34ffp64n2ayJf3AK_ueirEL6y2Ss87QPIg-S983xb-z82b1Z3VjPZsco6_gXPBK4BX91RvmJvNc113cej9j5NLZurDwrMzxT_Wmert1p0qAiQfKWcstbyGPesrpmE7yNpyJSG4wSBBIE2m9fL9FuAcGtu4J0lelrXa7spePTBAinJtbt0IF9DqwX8-7dRUNqovaV0zY0pumaZW6dLSDSA3p8YATsp758cZOBq9H0cpBNH1I7edW4OALGGtpLHQo-IN3RZ3u75Swm0n1-7B12yrlBJwCsHv9zFEyz0G6eEVcim4fErNPUblu_WLyJQUu5DWax_F9PFufRzJy77d2dfrs2efonz3qp1H8UBqX1lXKu5paKwoXYmpqGGe1hEOAMkJ-nxkgp8VmTABJA_x5yPzswITuaJDgn8FjK8vZ_D4scOOE-LCTs6FfTjNUU9d91sBSHHvKiWO4dk9fk1txxILyBLg19j19wHP-7MYPQfoW0oKtECA5Dg6h-AD13agAj4o3hwdfGqCY2M8aoXjasslNx3ACcDp1wjqi1tzmKZjmvgG_WXcCyM8VmmSw0eqJZcbNzwgpnjjunpZVgMXlsuyZ_2UctOay7eRCkcTQskNHKTXtw3k0p6Ap9rWMOvo5MUPxCGIlpAbqAYLVQttx2ClBtkYt8e1EBjEbotqoaocnIcTvmWPd7veHIx7htrdlp3JHECKT2Z5AZEj_5NdEF1f_Uq1prur8Wwue6KlJ1wYYQgWxYl8ewmystTMDML6GlW2XBs_NPxPptq9tkmhR_zt0DvQyPWTNvzYw18fXyC6eTb34jXy5ruwF67lP0vJr5egT8nxfVJ04TpZ6NNKKstOcuoZYxtWC6pZAzum2cinRXT0tl8i7Z6q8IircG_5E5z5xPXEnovsv8j-i-y_yP6L7L_I_h9a9qcOwSC8yP6L7L_I_ovsv8j-L5X9xz82uf8CIO3hYLjcQBCjTV1DgJP_FYUj61hjIEY4RGngnoFKwlsqP1Ct4Bsuhz_msyYjTUpSOmNZsCBJjEKUprMua5ukZW2SVowswrglAaUBqlBFw7hKcIBnPMMIRwgjEixIGKXzmqVR0rIFjpomaFIGQsR6ysXcvbu50psZN2ZgWYCjKAxmglZMGP_DGsYVrX9jsjkwCmCvwjCuVcOufh-o4HbnJqPlTGeeHNWwMSBEghtrDj4st4JlIEbPS0KM9pUU1qrfcjGh9i2YFqPZoEXWWbs1jvF4BfBqw203VPNa9Ud-Tr17iBz_J5QeMvx3AAAA___emIi5">