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

    <tr>
        <th>Summary</th>
        <td>
            Bulb fails with `error: iteration 258 invokes undefined behavior [-Werror=aggressive-loop-optimizations]`
        </td>
    </tr>

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

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

    <tr>
      <th>Reporter</th>
      <td>
          Elefant-Freeciv
      </td>
    </tr>
</table>

<pre>
    When building with libc project enabled, i get the following error:
```
./libc/src/__support/big_int.h:795:26: error: iteration 258 invokes undefined behavior [-Werror=aggressive-loop-optimizations]
  795 |       remainder[pos - 1] = val[pos - 1];
      |       ~~~~~~~~~~~~~~~~~~~^~~~~~
./libc/src/__support/big_int.h:794:16: note: within this loop
  794 |     for (; pos > 0; --pos) {
      |            ~~~~^~~
```

This is the command:
```
/usr/bin/c++ -DLIBC_NAMESPACE=__llvm_libc_21_0_0_git -I/home/null/Documents/R600/llvm-project-b233d79623dd3a6d307db2bc73ddd12e3a054460/build/projects/libc/src/stdio/generic -I/home/null/Documents/R600/llvm-project-b233d79623dd3a6d307db2bc73ddd12e3a054460/libc/src/stdio/generic -I/home/null/Documents/R600/llvm-project-b233d79623dd3a6d307db2bc73ddd12e3a054460/libc -isystem /home/null/Documents/R600/llvm-project-b233d79623dd3a6d307db2bc73ddd12e3a054460/build/projects/libc/include -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror=date-time -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wno-missing-field-initializers -pedantic -Wno-long-long -Wimplicit-fallthrough -Wno-maybe-uninitialized -Wno-nonnull -Wno-class-memaccess -Wno-redundant-move -Wno-pessimizing-move -Wno-noexcept-type -Wdelete-non-virtual-dtor -Wsuggest-override -Wno-comment -Wno-misleading-indentation -Wctad-maybe-unsupported -fdiagnostics-color -ffunction-sections -fdata-sections -O3 -DNDEBUG -DLIBC_QSORT_IMPL=LIBC_QSORT_QUICK_SORT -DLIBC_ADD_NULL_CHECKS -fpie -fno-builtin -fno-exceptions -fno-lax-vector-conversions -fno-unwind-tables -fno-asynchronous-unwind-tables -fno-rtti -ftrivial-auto-var-init=pattern -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -Wall -Wextra -Werror -Wconversion -Wno-sign-conversion -Wdeprecated -fext-numeric-literals -Wno-pedantic -Wimplicit-fallthrough -Wwrite-strings -Wextra-semi -DLIBC_COPT_PUBLIC_PACKAGING -DLIBC_COPT_STDIO_USE_SYSTEM_FILE -DLIBC_COPT_RAW_MUTEX_DEFAULT_SPIN_COUNT=100 -DLIBC_COPT_TIMEOUT_ENSURE_MONOTONICITY=1 -DLIBC_COPT_PRINTF_RUNTIME_DISPATCH -std=c++17 -MD -MT projects/libc/src/stdio/generic/CMakeFiles/libc.src.stdio.generic.vprintf.dir/vprintf.cpp.o -MF projects/libc/src/stdio/generic/CMakeFiles/libc.src.stdio.generic.vprintf.dir/vprintf.cpp.o.d -o projects/libc/src/stdio/generic/CMakeFiles/libc.src.stdio.generic.vprintf.dir/vprintf.cpp.o -c /home/null/Documents/R600/llvm-project-b233d79623dd3a6d307db2bc73ddd12e3a054460/libc/src/stdio/generic/vprintf.cpp
```

And this is the full error:
```
[862/12538] Building CXX object projects/libc/src/stdio/generic/CMakeFiles/libc.src.stdio.generic.vprintf.dir/vprintf.cpp.o
FAILED: projects/libc/src/stdio/generic/CMakeFiles/libc.src.stdio.generic.vprintf.dir/vprintf.cpp.o 
/usr/bin/c++ -DLIBC_NAMESPACE=__llvm_libc_21_0_0_git -I/home/null/Documents/R600/llvm-project-b233d79623dd3a6d307db2bc73ddd12e3a054460/build/projects/libc/src/stdio/generic -I/home/null/Documents/R600/llvm-project-b233d79623dd3a6d307db2bc73ddd12e3a054460/libc/src/stdio/generic -I/home/null/Documents/R600/llvm-project-b233d79623dd3a6d307db2bc73ddd12e3a054460/libc -isystem /home/null/Documents/R600/llvm-project-b233d79623dd3a6d307db2bc73ddd12e3a054460/build/projects/libc/include -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror=date-time -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wno-missing-field-initializers -pedantic -Wno-long-long -Wimplicit-fallthrough -Wno-maybe-uninitialized -Wno-nonnull -Wno-class-memaccess -Wno-redundant-move -Wno-pessimizing-move -Wno-noexcept-type -Wdelete-non-virtual-dtor -Wsuggest-override -Wno-comment -Wno-misleading-indentation -Wctad-maybe-unsupported -fdiagnostics-color -ffunction-sections -fdata-sections -O3 -DNDEBUG -DLIBC_QSORT_IMPL=LIBC_QSORT_QUICK_SORT -DLIBC_ADD_NULL_CHECKS -fpie -fno-builtin -fno-exceptions -fno-lax-vector-conversions -fno-unwind-tables -fno-asynchronous-unwind-tables -fno-rtti -ftrivial-auto-var-init=pattern -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -Wall -Wextra -Werror -Wconversion -Wno-sign-conversion -Wdeprecated -fext-numeric-literals -Wno-pedantic -Wimplicit-fallthrough -Wwrite-strings -Wextra-semi -DLIBC_COPT_PUBLIC_PACKAGING -DLIBC_COPT_STDIO_USE_SYSTEM_FILE -DLIBC_COPT_RAW_MUTEX_DEFAULT_SPIN_COUNT=100 -DLIBC_COPT_TIMEOUT_ENSURE_MONOTONICITY=1 -DLIBC_COPT_PRINTF_RUNTIME_DISPATCH -std=c++17 -MD -MT projects/libc/src/stdio/generic/CMakeFiles/libc.src.stdio.generic.vprintf.dir/vprintf.cpp.o -MF projects/libc/src/stdio/generic/CMakeFiles/libc.src.stdio.generic.vprintf.dir/vprintf.cpp.o.d -o projects/libc/src/stdio/generic/CMakeFiles/libc.src.stdio.generic.vprintf.dir/vprintf.cpp.o -c /home/null/Documents/R600/llvm-project-b233d79623dd3a6d307db2bc73ddd12e3a054460/libc/src/stdio/generic/vprintf.cpp
In file included from /home/null/Documents/R600/llvm-project-b233d79623dd3a6d307db2bc73ddd12e3a054460/libc/src/stdio/printf_core/printf_main.h:16,
                 from /home/null/Documents/R600/llvm-project-b233d79623dd3a6d307db2bc73ddd12e3a054460/libc/src/stdio/printf_core/vfprintf_internal.h:17,
                 from /home/null/Documents/R600/llvm-project-b233d79623dd3a6d307db2bc73ddd12e3a054460/libc/src/stdio/generic/vprintf.cpp:14:
/home/null/Documents/R600/llvm-project-b233d79623dd3a6d307db2bc73ddd12e3a054460/libc/src/stdio/printf_core/parser.h: In instantiation of ‘__llvm_libc_21_0_0_git::cpp::optional<T> __llvm_libc_21_0_0_git::printf_core::Parser<ArgProvider>::get_arg_value(size_t) [with T = long double; ArgProvider = __llvm_libc_21_0_0_git::internal::ArgList; size_t = long unsigned int]’:
/home/null/Documents/R600/llvm-project-b233d79623dd3a6d307db2bc73ddd12e3a054460/libc/src/stdio/printf_core/parser.h:242:11:   required from ‘__llvm_libc_21_0_0_git::printf_core::FormatSection __llvm_libc_21_0_0_git::printf_core::Parser<ArgProvider>::get_next_section() [with ArgProvider = __llvm_libc_21_0_0_git::internal::ArgList]’
/home/null/Documents/R600/llvm-project-b233d79623dd3a6d307db2bc73ddd12e3a054460/libc/src/stdio/printf_core/printf_main.h:29:59:   required from ‘int __llvm_libc_21_0_0_git::printf_core::printf_main(Writer<write_mode>*, const char*, __llvm_libc_21_0_0_git::internal::ArgList&) [with WriteMode write_mode = __llvm_libc_21_0_0_git::printf_core::WriteMode::RUNTIME_DISPATCH]’
/home/null/Documents/R600/llvm-project-b233d79623dd3a6d307db2bc73ddd12e3a054460/libc/src/stdio/printf_core/vfprintf_internal.h:79:27:   required from here
/home/null/Documents/R600/llvm-project-b233d79623dd3a6d307db2bc73ddd12e3a054460/libc/src/stdio/printf_core/parser.h:429:51: note: the ABI of passing union with ‘long double’ has changed in GCC 4.4
  429 |   template <class T> LIBC_INLINE cpp::optional<T> get_arg_value(size_t index) {
      |                                                   ^~~~~~~~~~~~~
In file included from /home/null/Documents/R600/llvm-project-b233d79623dd3a6d307db2bc73ddd12e3a054460/libc/src/__support/uint128.h:12,
                 from /home/null/Documents/R600/llvm-project-b233d79623dd3a6d307db2bc73ddd12e3a054460/libc/src/__support/FPUtil/FPBits.h:27,
                 from /home/null/Documents/R600/llvm-project-b233d79623dd3a6d307db2bc73ddd12e3a054460/libc/src/stdio/printf_core/core_structs.h:16,
                 from /home/null/Documents/R600/llvm-project-b233d79623dd3a6d307db2bc73ddd12e3a054460/libc/src/stdio/printf_core/vfprintf_internal.h:16:
In member function ‘constexpr __llvm_libc_21_0_0_git::cpp::optional<__llvm_libc_21_0_0_git::BigInt<Bits, Signed, WordType> > __llvm_libc_21_0_0_git::BigInt<Bits, Signed, WordType>::div_uint_half_times_pow_2(__llvm_libc_21_0_0_git::multiword::half_width_t<WordType>, size_t) [with long unsigned int Bits = 16512; bool Signed = false; WordType = long unsigned int]’,
    inlined from ‘static constexpr __llvm_libc_21_0_0_git::BlockInt __llvm_libc_21_0_0_git::FloatToString<long double>::grab_digits(__llvm_libc_21_0_0_git::UInt<Bits>&) [with long unsigned int Bits = 16512]’ at /home/null/Documents/R600/llvm-project-b233d79623dd3a6d307db2bc73ddd12e3a054460/libc/src/__support/float_to_string.h:653:57,
    inlined from ‘constexpr void __llvm_libc_21_0_0_git::FloatToString<long double>::init_convert()’ at /home/null/Documents/R600/llvm-project-b233d79623dd3a6d307db2bc73ddd12e3a054460/libc/src/__support/float_to_string.h:691:62:
/home/null/Documents/R600/llvm-project-b233d79623dd3a6d307db2bc73ddd12e3a054460/libc/src/__support/big_int.h:795:26: error: iteration 258 invokes undefined behavior [-Werror=aggressive-loop-optimizations]
  795 |       remainder[pos - 1] = val[pos - 1];
      |       ~~~~~~~~~~~~~~~~~~~^~~~~~
/home/null/Documents/R600/llvm-project-b233d79623dd3a6d307db2bc73ddd12e3a054460/libc/src/__support/big_int.h:794:16: note: within this loop
  794 |     for (; pos > 0; --pos) {
      |            ~~~~^~~
cc1plus: all warnings being treated as errors
```
This error is present for files vprintf.cpp.o, printf.cpp.o, vsprintf.cpp.o, vasprintf.cpp.o, snprintf.cpp.o, vfprintf.cpp.o, fprintf.cpp.o, and many more.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzsWltz4jgW_jXKi0oUyBjCQx6MwT3UJCTTQGXmySWsY9COLHkkmST9sL99SzIk5DLp7prtTrY2rlRA96PznctnCWat2CiAMxSPUTw5YY3banM2lVAy5UhmAAqxO1lrfnd2vQWF142QXKgNvhFui6VYF7g2-l9QOAyKrSVwRFMs8AYcdlvApZZS3_gBYIw2KEpQN0GD7v6vm3QQzfw0iGbW-P95bpu61sYhmq3FJhfKdbYoSoajGEUJHaAouZ8LCweGOaEVpvEpFmqn_wSLG8WhFAo4XsOW7YQ2GMVjcr0fNmGbjQFrxQ6I1LomunaiEl_CRBbFE9RNMB6OYoyGKW4fAxUTioNB8bjWFhPcQ_EEo2iCd0w-qkTROEzgn4cJ_v38QfG0_fwuLfRRlPSCFpR24D89FEJhtxUW-_3sxe_fr156BdBTFI2xFxNFU9z1BUJqbREdYTR8SeR7uYOgT3BD3WTpFxQ24FzoqmKKP8cX0ayxJuxCIZoViI4RHWMyOZ-N03yeXEwXV0k6RdEkz6XcVblXQ057eTfv5hvhMJkhmm11BYhmqpES0Wyii6YC5Syi2edBt-uVJ3cV2VsiWdMo4sPRgEacR2zAo-6Qr-m6GEac8x6FiHXjfn_gxwV7RjTbD7VPcbCOC41otgEFRhQ_WJo3XhoTYe-sgwq_jcqFKmTDAZPyapZiUipNLFRMOVEQoRyYWlsRvJ2UO2HFWkjh7ohQUiiwZCs4B4Uf_JwzB8SJCjC5ZlL6lltnGCbXSpNGNRY4qZlhFTgwmFzfGOGAWGeE2lhMrgtmHfmrYbIdUQlrhdqQUoDkRCjhBJPiCxiLSQ08yNn2lFptwj9MrkVVS1EIR0ompdsa3Wy2-_nY3RpIox5m4m2D0sqrvS0UkllLKqhYUYC1baUB3ii_Iqn0Dtq62oe0SnzxIj7UKg23BdSOuLvaV3GQ4MAvQXbCuIZJwp32u7fNZgPWEb0DYwTfj_eODcrda0AC8_Gf-GCoXBt7yXXhGL_fzz5y-d2UXLCN0taJwpJCS79QWTaq8OOIhfBpfT_m2FH5MsJkMp9Mx6tPh1Dx2-Ly8zKfXVydo-i45rfVLP01918PPZPJJJ-vzs_z9Jdp-usCk7IW0JqTtz0nVFtoFbMXwKPGbskOCqcNKbTagbEPbY26EYoT51PcvorZO1VsjVa6sS-1G-cEJqUzYieYJKxxmuyYCYaDoknNnAOzF0VX3kC8JZJaB1PHpDrUS2Dl08Yn9hws3uNwL3cLmM_u5FElh9pAwVp04NYR1VQ-vBAZcqm0B2O6t-e_MeCnzhJE8f4qDjikl1fL_Go1Pp-l-VWS_pp8ms0_PWpcLCezy3y1mOaLPxbL6UWezc6nj3p8Tq7zi9Vy-ns-mWbJ6nyZL65m8zy9XM2XKJr0ut1H3Zezi-nlaplP54vV52l-cTm_XF7OZ-ls-Yfv_Viyz7P5Mss_r-Z-VD6ZLa6SZfoLJtZxFE32mao3xORigsnFEn9jjkA0Sy_Yn5AJCYe-HWuKTujX2ffq7GojlCs7XPjseCgVdd3RmFxkP2-1DsdE_8zNFT80vXxF-iNZnjOaRPGWRu1ZTemj8N8QVxSPTwcU0axH4-jUk8HxgRunv_-O9TqQ4p-mVtRNsmR2Pp14RvjzwPxgeB8M74PhfTC8D4b3wfA-GN4Hw3t3DG-mcCkk4H3m4bg0-sdmvxfFa2XKC23goVQxocKpXm-AaHp_Anf0vAdhd-W-HAKTYrIVefiuRH4Z_ijp9ffM_Y0BZ8aCCYrDM4WFss4H3za56hKjKUWnXTQ6fZki-z1ESbsjFCU65DQmUZQuUTTFrw06liNUXAVRUJQmZnNl9E5wX5q2jRtwOTObfMdkA4ieWvEFcheOiONxOPJfhjPvwHy4btYSUDTGR1OF5tcEOlhRW0rM5lxY5ydp13qYvlHhboJjoRyKJwcVjd4boLRPvaH1PLYYG_irEeY-znwLrs8gyrSpmFu0XOm_jK6CW5fvaRiip8fQ_nMUj1F6e4ieBFnqLScevQqTUO779H20CKKn154xee0H6pRXmoNXPk0QTXGhlXW42DKzr_h-_dLBMV5htQvNAT8s91Xgnu3gfpa2-JQsvS9MX85FQw8qHb6E7BYMvL3YR9Gi35ph7_gCz20BJ-OZTwQ1C2-guFHe9QPM98Z5HHQPkOAts96m1CYESvwpTXG_0w-JuR9u9lKMsYOqlsx560jD2yYOeSMw5dn8fDaf4r9NLi-nBOzfDm-_cnf4jc_hHvRwLfrmpO348rURyvXoact56LvgPMfiZVcrJ2T4MhbOtoHufVGzx67gP3LrTFPspf1f5L6DloPMFK6gWoPBhwOPB2cN0R5ua_NqNH7J617rPxabmXIoSj3YPocsAkXy36614cu72icc_DVS-G3TtH252OXeCfItk2XuRAU2r_VNThF9ldVUjXTiRhveFsPoG8HdNvcLHy9DU_ycZz6jgNjLGtJbbxD3qGeMa63lXvTQUDJpAx89zP4NZPLe9tozxqeEwDrmRIG_Dc2x1MWfs69QiExq5pZ6EY5VUJQ-otIHombYOudiE9B5VcurIxy9KgffpcMjRWDm3iaClV4fudN5e9AUHGwQRz5JDr-GzgMsOy34P1a7UMLl7Vmaa7nxO1XPyNOHAf3Jb0L_l7_MegfafcNffBVFr5aN9WsyKfENMyocBq_Bk1RnIBwzM9vibp9ckYYfiLUH18Li2oAF5YJsnt1Z_PgCk6b4aXlnn9WwZ1VWPetUPq15VsEUxxVTd7jSBjon_Czio2jETuCsN-z349PeKI5Ptmd0yCPWg-665KyEYRnREY-iqF9Gp2wwPB2eiDPapXG334so7cZx3ImhW4wGdAjrwXBIoUT9rjdQ2fFG0tFmcyKsbeCsF8XxYHQi2RqkDT-_pFTBDQ6tiPrYfGLOgmWtm41F_a4U1tmHaZxwEs7GjVzjkglp9y8Lg-6PdsFB96Qx8mzrXO0NA9EM0Wwj3LZZdwpd7f3hiVsgmoWdea_Zb313Rv8TAAD__wVQs6A">