https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91353
--- Comment #4 from Marek Polacek <mpolacek at gcc dot gnu.org> --- (In reply to Jakub Jelinek from comment #3) > (In reply to Marek Polacek from comment #2) > > The quux case: CONSTRUCTOR_NO_CLEARING is cleared here > > > > 2154 /* The result of a constexpr function must be completely initialized. > > */ > > 2155 if (TREE_CODE (result) == CONSTRUCTOR) > > 2156 clear_no_implicit_zero (result); > > > > but we can no longer assume that a constexpr constructor has initialized all > > the members. > > I'd think we can still assume it for non-constructors (because if a function > returns some aggregate, it went through the lvalue to rvalue conversion and > therefore shouldn't refer to uninitialized members). Constructors don't > really > return the object they are initializing. Though, perhaps we should make a > difference between constructors that do have member initializers for all > members and those that don't. I'm experimenting with the last -- add an allow_missing param to cx_check_missing_mem_inits and don't clear the flag when there are inits missing. Something to consider: unions will never have initialized all its members.