This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH] Fix strict-aliasing warning in resolv/res_hconf.c
- From: Steve Ellcey <sellcey at imgtec dot com>
- To: Roland McGrath <roland at hack dot frob dot com>
- Cc: Florian Weimer <fweimer at redhat dot com>, Pedro Alves <palves at redhat dot com>, Andreas Schwab <schwab at suse dot de>, Paul Eggert <eggert at cs dot ucla dot edu>, <libc-alpha at sourceware dot org>
- Date: Thu, 28 May 2015 16:18:44 -0700
- Subject: Re: [PATCH] Fix strict-aliasing warning in resolv/res_hconf.c
- Authentication-results: sourceware.org; auth=none
- References: <5bfa6373-3817-4d31-a5ee-a8676e79b723 at BAMAIL02 dot ba dot imgtec dot org> <555BB55E dot 3050304 at cs dot ucla dot edu> <1432075989 dot 16668 dot 62 dot camel at ubuntu-sellcey> <555BC19B dot 90001 at cs dot ucla dot edu> <1432077972 dot 16668 dot 65 dot camel at ubuntu-sellcey> <20150519235817 dot 9516F2C3A73 at topped-with-meat dot com> <555C3E0B dot 2040404 at redhat dot com> <mvma8wzbqsv dot fsf at hawking dot suse dot de> <555C48F0 dot 2030208 at redhat dot com> <1432139240 dot 16668 dot 77 dot camel at ubuntu-sellcey> <55658C2A dot 70209 at redhat dot com> <5565B4D3 dot 3090401 at redhat dot com> <1432828842 dot 20199 dot 15 dot camel at ubuntu-sellcey> <20150528201038 dot 003B42C3B00 at topped-with-meat dot com> <1432850960 dot 20199 dot 25 dot camel at ubuntu-sellcey> <20150528225742 dot A6C552C3B00 at topped-with-meat dot com>
- Reply-to: <sellcey at imgtec dot com>
On Thu, 2015-05-28 at 15:57 -0700, Roland McGrath wrote:
> > I could, but I would rather not since I normally only build glibc for
> > MIPS and it always takes me a while to figure out the options and
> > settings for an x86 build. I did a build using GCC 4.9.2 for MIPS and
> > did not see any significant code differences with this patch (i.e. I did
> > not see an extra data copy on MIPS).
>
> OK, that's good enough for me to assume that there won't be any extra data
> copy on any machine with a reasonable compiler. (I actually asked about
> x86_64 specifically because I wouldn't care about the MIPS code being
> suboptimal as long as the x86 code was not.)
>
> The only other thing I'd say about the patch is that the temporary
> variable should be declared in the innermost possible scope.
>
>
> Thanks,
> Roland
OK, moving the declaration is easy enough to do, I will put it in the
for loop where it is used.
Steve Ellcey
sellcey@imgtec.com
2015-05-28 Steve Ellcey <sellcey@imgtec.com>
* resolv/res_hconf.c (_res_hconf_reorder_addrs): Use a union to
copy data from cur_ifr->ifr_addr.
diff --git a/resolv/res_hconf.c b/resolv/res_hconf.c
index 73942e8..b9c229d 100644
--- a/resolv/res_hconf.c
+++ b/resolv/res_hconf.c
@@ -439,18 +439,24 @@ _res_hconf_reorder_addrs (struct hostent *hp)
for (cur_ifr = ifr, i = 0; i < num;
cur_ifr = __if_nextreq (cur_ifr), ++i)
{
+ union
+ {
+ struct sockaddr sa;
+ struct sockaddr_in sin;
+ } ss;
+
if (cur_ifr->ifr_addr.sa_family != AF_INET)
continue;
ifaddrs[new_num_ifs].addrtype = AF_INET;
- ifaddrs[new_num_ifs].u.ipv4.addr =
- ((struct sockaddr_in *) &cur_ifr->ifr_addr)->sin_addr.s_addr;
+ ss.sa = cur_ifr->ifr_addr;
+ ifaddrs[new_num_ifs].u.ipv4.addr = ss.sin.sin_addr.s_addr;
if (__ioctl (sd, SIOCGIFNETMASK, cur_ifr) < 0)
continue;
- ifaddrs[new_num_ifs].u.ipv4.mask =
- ((struct sockaddr_in *) &cur_ifr->ifr_netmask)->sin_addr.s_addr;
+ ss.sa = cur_ifr->ifr_netmask;
+ ifaddrs[new_num_ifs].u.ipv4.mask = ss.sin.sin_addr.s_addr;
/* Now we're committed to this entry. */
++new_num_ifs;