On Thu, Nov 04, 2021 at 12:39:34PM +0000, Iain Sandoe wrote: > Bootstrap succeeded with Apple clang-503.0.40 (Xcode 5.1.1) on macOS 10.8 > which is the earliest version I expect to work (previous xcode impl. have more > C++11 incompatibilities). So OK from a Darwin PoV. > > The other reported toolchain with the issue was GCC-4.9.2 as discussed on > IRC - this also seems OK.
Yeah, I've been testing it on a short testcase with just enum stringop_alg, struct stringop_algs and ix86_size_memcpy on godbolt too: https://godbolt.org/z/vfcz8xen6 enum stringop_alg { no_stringop, libcall, rep_prefix_1_byte, rep_prefix_4_byte, rep_prefix_8_byte, loop_1_byte, loop, unrolled_loop, vector_loop, last_alg }; struct stringop_algs { const enum stringop_alg unknown_size; const struct stringop_strategy { #ifndef NO_CTOR #ifdef CONSTEXPR constexpr #endif stringop_strategy(int _max = -1, enum stringop_alg _alg = libcall, int _noalign = false) : max (_max), alg (_alg), noalign (_noalign) {} #endif const int max; const enum stringop_alg alg; int noalign; } size [4]; }; stringop_algs ix86_size_memcpy[2] = { {rep_prefix_1_byte, {{-1, rep_prefix_1_byte, false}}}, {rep_prefix_1_byte, {{-1, rep_prefix_1_byte, false}}}}; and tested the various cases, no stringop_strategy ctor at all, the ctor and ctor with constexpr. 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. > > Especially because 11.x is not going to have the dyninit optimization for > > sure, it would be nice to do this on the 11 branch too. > > > > 2021-11-04 Jakub Jelinek <ja...@redhat.com> > > > > PR bootstrap/100246 > > * config/i386/i386.h > > (stringop_algs::stringop_strategy::stringop_strategy): Make the ctor > > constexpr. > > > > --- gcc/config/i386/i386.h.jj 2021-09-28 23:18:35.282563395 +0200 > > +++ gcc/config/i386/i386.h 2021-11-04 10:48:47.165086806 +0100 > > @@ -78,8 +78,9 @@ struct stringop_algs > > this issue. Since this header is used by code compiled with the C > > compiler we must guard the addition. */ > > #ifdef __cplusplus > > - stringop_strategy(int _max = -1, enum stringop_alg _alg = libcall, > > - int _noalign = false) > > + constexpr stringop_strategy(int _max = -1, > > + enum stringop_alg _alg = libcall, > > + int _noalign = false) > > : max (_max), alg (_alg), noalign (_noalign) {} > > #endif > > const int max; Jakub