https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115900
--- Comment #5 from Marek Polacek <mpolacek at gcc dot gnu.org> --- What changed is the initializer we generate for 'd'. It used to be: d = {.D.2656={.a={.data=0}}} but now it is: D::D ((struct D *) &d) The second one causes trouble because we evaluate ((struct A *) this)->data = NON_LVALUE_EXPR <0> (where the LHS evaluates to d.D.256.a) *after* 'd' was marked READONLY in build_aggr_init, which causes the error.