https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86465
Jeffrey A. Law <law at redhat dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |law at redhat dot com --- Comment #8 from Jeffrey A. Law <law at redhat dot com> --- Just a note, this is a distinct problem from pr80635. Interestingly enough we get no useful output from the uninit pass. AFAICT uninit is complaining about the various MEMs being potentially uninitialized. Just taking the first instance as an example. It's complaining about this statement in from bb2: MEM[(union _Any_data * {ref-all})&fo] = MEM[(union _Any_data & {ref-all})&D.35879]; If we look at the entirety of BB2 we have: <bb 2> [local count: 1073741824]: MEM[(struct function *)&fo] ={v} {CLOBBER}; MEM[(struct _Function_base *)&fo] ={v} {CLOBBER}; MEM[(int (*<T24ca>) (void) *)&fo] = f1; MEM[(struct function *)&fo1] ={v} {CLOBBER}; MEM[(struct _Function_base *)&fo1] ={v} {CLOBBER}; MEM[(struct _Function_base *)&D.35879] ={v} {CLOBBER}; __tmp = MEM[(union _Any_data & {ref-all})&fo]; MEM[(union _Any_data * {ref-all})&fo] = MEM[(union _Any_data & {ref-all})&D.35879]; MEM[(union _Any_data * {ref-all})&D.35879] = __tmp; __tmp ={v} {CLOBBER}; MEM[(bool (*<T52d1>) (union _Any_data & {ref-all}, const union _Any_data & {ref-all}, _Manager_operation) &)&fo + 16] = 0B; MEM[(int (*<T5c73>) (const union _Any_data & {ref-all}) &)&fo + 24] = SR.67_104(D); __tmp = MEM[(union _Any_data & {ref-all})&D.35879]; MEM[(union _Any_data * {ref-all})&fo1] = __tmp; __tmp ={v} {CLOBBER}; MEM[(bool (*<T52d1>) (union _Any_data & {ref-all}, const union _Any_data & {ref-all}, _Manager_operation) &)&fo1 + 16] = _M_manager; MEM[(int (*<T5c73>) (const union _Any_data & {ref-all}) &)&fo1 + 24] = _M_invoke; D.35879 ={v} {CLOBBER}; D.35879 ={v} {CLOBBER}; _8 = std::function<int()>::operator() (&fo1); Note this clobber: MEM[(struct _Function_base *)&D.35879] ={v} {CLOBBER}; The type is different than the statement we're complaining about: MEM[(union _Any_data * {ref-all})&fo] = MEM[(union _Any_data & {ref-all})&D.35879]; I'm not sure if that's relevant. I've never really dug into the uninit bits as they relate to memory references.