On Fri, May 06, 2022 at 11:56:30AM -0400, Jason Merrill via Gcc-patches wrote: > On 5/6/22 11:22, Patrick Palka wrote: > > Here ever since r10-7313-gb599bf9d6d1e18, reduced_constant_expression_p > > in C++11/14 is rejecting the marked sub-aggregate initializer (of type S) > > > > W w = {.D.2445={.s={.D.2387={.m=0}, .b=0}}} > > ^ > > > > ultimately because said initializer has CONSTRUCTOR_NO_CLEARING set, and > > so the function proceeds to verify that all fields of S are initialized. > > And before C++17 we don't expect to see base class fields (since > > next_initializable_field skips over the), so the base class initializer > > causes r_c_e_p to return false. > > That seems like the primary bug. I guess r_c_e_p shouldn't be using > next_initializable_field. Really that function should only be used for > aggregates.
Can we please make a note to this effect in the n_i_f comment? Thanks, Marek