Date: Mon, 9 Feb 2004 20:40:15 -0800 (PST) From: Roop Nanuwa <roop@hqst.com> To: FreeBSD-gnats-submit@FreeBSD.org Subject: bin/62615: [PATCH] fix ypxfr/ypxfr_misc.c strict aliasing error Message-ID: <200402100440.i1A4eF0I088006@h24-82-165-92.va.shawcable.net> Resent-Message-ID: <200402100450.i1A4oK69071846@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 62615 >Category: bin >Synopsis: [PATCH] fix ypxfr/ypxfr_misc.c strict aliasing error >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Mon Feb 09 20:50:20 PST 2004 >Closed-Date: >Last-Modified: >Originator: Roop Nanuwa >Release: FreeBSD 5.2-CURRENT i386 >Organization: >Environment: System: FreeBSD h24-82-165-92.va.shawcable.net 5.2-CURRENT FreeBSD 5.2-CURRENT #0: Sat Feb 7 15:13:01 PST 2004 roop@h24-82-165-92.va.shawcable.net:/usr/obj/usr/src/sys/TURING i386 >Description: ypxfr_misc.c contains an error that violates strict aliasing rules. When compiling with -O2 optimizations (or just -fstrict-aliasing) the code refuses to compile. The variable 'order' was created as an unsigned long and then passed by reference as type int* which caused the compilation error. The variable is only used to return the order value as an unsigned long. The fix changes the type of 'order' to 'unsigned int' and then passes that to the yp_order function without breaking aliasing rules. The only need for it to actually be an unsigned long is for the return type which it is safely up-cast as. >How-To-Repeat: Attempt to buildworld with -O2 or -fstrict-aliasing. Among many other locations one of the errors will be in usr.sbin/rpc.ypxfr which is caused by the above problem. >Fix: --- libexec/ypxfr/ypxfr_misc.c.old Sat May 3 17:59:13 2003 +++ libexec/ypxfr/ypxfr_misc.c Mon Feb 9 20:17:07 2004 @@ -194,9 +194,9 @@ ypxfr_get_order(char *domain, char *map, char *source, const int yplib) { if (yplib) { - unsigned long order; + unsigned int order; int res; - if ((res = yp_order(domain, map, (int *)&order))) { + if ((res = yp_order(domain, map, &order))) { switch (res) { case YPERR_DOMAIN: yp_errno = YPXFR_NODOM; >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200402100440.i1A4eF0I088006>