https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86465
--- Comment #9 from Jeffrey A. Law <law at redhat dot com> --- So from the uninit analyzer's standpoint the clobber isn't considered an initialization (which makes sense). As a result the object really does appear to be uninitialized. struct function D.35879; [ ... ] 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]; That last statement reads from D.35879 which was never initialized