https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66946
Bug ID: 66946 Summary: Spurious uninitialized warning Product: gcc Version: 6.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: wdijkstr at arm dot com Target Milestone: --- Created attachment 36016 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=36016&action=edit preprocessed iso-2022-cn-ext.c Since recently (around May) GCC6 has started to emit spurious uninitialized warnings. An example from building GLIBC (compiled attached pp file with -O2 -Wall -c out.i): In file included from iso-2022-cn-ext.c:659:0: ../iconv/skeleton.c: In function 'gconv': ../iconv/loop.c:325:295: warning: '*((void *)&buf+1)' is used uninitialized in this function [-Wuninitialized] ../iconv/loop.c:325:295: warning: 'buf' is used uninitialized in this function [-Wuninitialized] ../iconv/loop.c:325:295: warning: '*((void *)&buf+1)' is used uninitialized in this function [-Wuninitialized] ../iconv/loop.c:325:295: warning: 'buf' is used uninitialized in this function [-Wuninitialized] In file included from iso-2022-cn-ext.c:659:0: ../iconv/loop.c:435:295: warning: '*((void *)&buf+1)' is used uninitialized in this function [-Wuninitialized] ../iconv/loop.c:435:295: warning: 'buf' is used uninitialized in this function [-Wuninitialized] I checked the control flow and it seems correct. glibc/iconvdata/iso-2022-cn-ext.c calls one of ucs4_to_gb2312, ucs4_to_isoir165 and ucs4_to_cns11643l1 at lines 432-447 - buf is not written if __UNKNOWN_10646_CHAR is returned. In that case however the if statement is executed which does eventually set buf[0] and buf[1]. There is no warning if inlining is disabled, so it is caused by the ucs4_* inline functions not always setting buf.