https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100246
--- Comment #12 from CVS Commits <cvs-commit at gcc dot gnu.org> --- The releases/gcc-11 branch has been updated by Jakub Jelinek <ja...@gcc.gnu.org>: https://gcc.gnu.org/g:04d786a7add8f824af3b0c0d29884770810f7001 commit r11-9329-g04d786a7add8f824af3b0c0d29884770810f7001 Author: Jakub Jelinek <ja...@redhat.com> Date: Fri Nov 5 16:39:14 2021 +0100 x86: Make stringop_algs::stringop_strategy ctor constexpr [PR100246] > Several older compilers fail to build modern GCC because of missing > or incomplete C++11 support. > > * config/i386/i386.h (struct stringop_algs): Define a CTOR for > this type. Unfortunately, as mentioned in my https://gcc.gnu.org/pipermail/gcc-patches/2021-November/583289.html mail, without the new dyninit pass this causes dynamic initialization of many variables, 6.5KB _GLOBAL__sub_I_* on x86_64 and 12.5KB on i686. The following patch makes the ctor constexpr so that already the FE is able to statically initialize all those. I have tested on godbolt a reduced testcase without a constructor, with constructor and with constexpr constructor. clang before 3.3 is unhappy about all the 3 cases, clang 3.3 and 3.4 is ok with ctor and ctor with constexpr and optimizes it into static initialization, clang 3.5+ is ok with all 3 versions and optimizes, gcc 4.8 and 5+ is ok with all 3 versions and no ctor and ctor with constexpr is optimized, gcc 4.9 is unhappy about the no ctor case and happy with the other two. 2021-11-05 Jakub Jelinek <ja...@redhat.com> PR bootstrap/100246 * config/i386/i386.h (stringop_algs::stringop_strategy::stringop_strategy): Make the ctor constexpr. (cherry picked from commit 858d7ee1a0cd97c01d844ea73ab81918da738344)