https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118169
--- Comment #19 from Jason Merrill <jason at gcc dot gnu.org> --- (In reply to Jakub Jelinek from comment #17) > Now we just try to evaluate it with the B type. As intended, yes. > just the final MODIFY_EXPR (D.2922 = 0; in there) wasn't for > whatever reason converted to void and so has BOOLEAN_TYPE and we then just > try to set D.2912 to false. That's the problem; we want to avoid trying to apply the D.2922 assignment to D.2912 as well, whether by converting the MODIFY_EXPR to void or otherwise. > But that is wrong, we shouldn't be converting that to the object type, as it > is just sequence of void statements. Yes, a sequence of statements that initialize subobjects of the object; after evaluating all of them, the object should be initialized.