https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100262
--- Comment #5 from Martin Sebor <msebor at gcc dot gnu.org> --- I should add: because mdesc is a member of another struct it can't have a flexible array member, but as long as the enclosing struct mdesc_handle is not embedded as a member in another struct it can have a trailing flexible array member, like so: struct mdesc_handle { struct list_head list; struct mdesc_mem_ops *mops; void *self_base; refcount_t refcnt; unsigned int handle_size; struct mdesc_hdr mdesc; char data[]; }; Then changing the accesses from the end of mdesc to those from the beginning of the data array would also correct the problem and presumably be a cleaner way of writing the code.