Message ID | 1339394724-28296-1-git-send-email-roland@kernel.org |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
From: Roland Dreier <roland@kernel.org> Date: Sun, 10 Jun 2012 23:05:24 -0700 > From: Roland Dreier <roland@purestorage.com> > > If I build with W=1, for every file that includes <net/route.h>, I get the warning > > include/net/route.h: In function 'ip_route_output': > include/net/route.h:135:3: warning: initialized field overwritten [-Woverride-init] > include/net/route.h:135:3: warning: (near initialization for 'fl4') [-Woverride-init] > > (This is with "gcc (Debian 4.6.3-1) 4.6.3") > > A fix seems pretty trivial: move the initialization of .flowi4_tos > earlier. As far as I can tell, this has no effect on code generation. > > Signed-off-by: Roland Dreier <roland@purestorage.com> I can't figure out what it is actually warning about, can you? -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
> I can't figure out what it is actually warning about, can you?
I think gcc thinks it already initialized the __fl_common struct
once when it hits the .flowi4_oif initializer (which expands to
__fl_common.flowic_oif), and then having the .daddr / .saddr
initializers makes it thinks its done with that structure.
So it thinks it's initializing __fl_common.flowic_tos to 0, and
then the .flowi4_tos initializer comes along as a surprise.
Hmm, looks like http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52880
which is fixed after gcc 4.7.0. I think it's probably worth working
around this gcc issue, since this makes W=1 way noisier in
my build.
- R.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
From: Roland Dreier <roland@kernel.org> Date: Mon, 11 Jun 2012 00:00:51 -0700 >> I can't figure out what it is actually warning about, can you? > > I think gcc thinks it already initialized the __fl_common struct > once when it hits the .flowi4_oif initializer (which expands to > __fl_common.flowic_oif), and then having the .daddr / .saddr > initializers makes it thinks its done with that structure. > > So it thinks it's initializing __fl_common.flowic_tos to 0, and > then the .flowi4_tos initializer comes along as a surprise. > > Hmm, looks like http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52880 > which is fixed after gcc 4.7.0. I think it's probably worth working > around this gcc issue, since this makes W=1 way noisier in > my build. I suspected it was a compiler bug :-) Anyways, agreed, applied. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/include/net/route.h b/include/net/route.h index ed2b78e..9870546 100644 --- a/include/net/route.h +++ b/include/net/route.h @@ -130,9 +130,9 @@ static inline struct rtable *ip_route_output(struct net *net, __be32 daddr, { struct flowi4 fl4 = { .flowi4_oif = oif, + .flowi4_tos = tos, .daddr = daddr, .saddr = saddr, - .flowi4_tos = tos, }; return ip_route_output_key(net, &fl4); }