On Wed, 2016-09-28 at 16:03 +0300, Cyrill Gorcunov wrote: > On Wed, Sep 28, 2016 at 05:57:12AM -0700, Eric Dumazet wrote: > ... > > Note that some programs could fail to compile with the added union > > anyway. > > > > Some gcc versions are unable to compile a static init with an union > > > > struct inet_diag_req_v2 foo = { .pad = 0, sdiag_family = AF_INET, }; > > > > When I cooked my recent fq commit I simply removed a pad and replaced > > it : > > > > git show fefa569a9d4bc4 -- include > > Oh, crap :( I've been looking into uapi headers, found that we > use anonymous unions (for example include/uapi/linux/bcache.h) > and thought it will be safe (and my test builds didn't fail). > Are you happen to know which gcc versions cant do that?
The most recent example I have in mind is a kbuild bot report on the recent TCP BBR patches. We had to rework the patch to avoid the problem. If I remember well, this was a gcc-4.7, but not on x86.