Date: Thu, 7 Aug 2003 22:59:35 +1000 (EST) From: Bruce Evans <bde@zeta.org.au> To: Hartmut Brandt <harti@FreeBSD.org> Cc: cvs-all@FreeBSD.org Subject: Re: cvs commit: src/sys/dev/en midway.c Message-ID: <20030807222014.B1480@gamplex.bde.org> In-Reply-To: <20030806162837.D622@beagle.fokus.fraunhofer.de> References: <200308061130.h76BUrPt029894@repoman.freebsd.org> <20030806162837.D622@beagle.fokus.fraunhofer.de>
next in thread | previous in thread | raw e-mail | index | archive | help
> On Wed, 6 Aug 2003, Andrew Gallatin wrote: > > AG>Hartmut Brandt [harti@FreeBSD.org] wrote: > AG>> harti 2003/08/06 04:30:53 PDT > AG>> > AG>> FreeBSD src repository > AG>> > AG>> Modified files: > AG>> sys/dev/en midway.c > AG>> Log: > AG>> Print an array index that is computed as ptrdiff_t with %tu. > AG> > AG>I don't understand why, but this breaks the sparc64 and alpha tinderboxes. > AG>See > AG>http://docs.freebsd.org/cgi/getmsg.cgi?fetch=574500+0+current/freebsd-current > > Not really. The breakage was earlier when the ptrdiff_t was printed via > %d. David O'Brien fixed that by converting to long and using %ld. The > above commit now uses the knowledge that the difference is actually an > array index and therefor uses %tu. The tinderbox log file seems to be from > yesterday before David's fix. It also uses the knowledge that the difference is non-negative. Why not just print the difference as it is using the natural format %td? This makes no difference if the, uhm, difference is non-negative, but avoids undefined behaviour if the difference is somehow negative. Printing -1 using %tu on i386's gives an interesting example of the undefined behaviour that results when a negative value is printed using an unsigned format. I expected the result UINT_MAX (2^32-1), but the actual result is UINTMAX_MAX (2^64-1). This is because the implementation represents numbers using "uintmax_t ujval" for the %tu and %td formats, so it represents -1 as UINTMAX_MAX, and then it just prints this value. Bruce
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20030807222014.B1480>