------- Comment #3 from rguenth at gcc dot gnu dot org 2008-11-15 20:40 ------- Note that ...
struct dictitem_S { typval_T di_tv; /* type and value of the variable */ char_u di_flags; /* flags (only used for variable) */ char_u di_key[1]; /* key (actually longer!) */ }; 227 struct /* fixed variables for arguments */ 228 { 229 dictitem_T var; /* variable (without room for name) */ 230 char_u room[VAR_SHORT_LEN]; /* room for the name */ 231 } fixvar[FIXVAR_CNT]; room makes fixvar[].var.di_key no longer a tra iling array. Crossing objects from di_key to room is not allowed by the C standard. You may instead want to do union { dictitem_t var; char_u room[sizeof(dictitem_t) + VAR_SHORT_LEN]; } fixvar[FIXVAR_CNT]; which should be valid (I might have to doubl-check the standard though). -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38136