plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

commit 34167aa6b0d7d53016b8574b4fe1fac764ddf615
parent b32d9d9c2e07681450a7ea1801b07e5727fa39e2
Author: Russ Cox <rsc@swtch.com>
Date:   Mon,  3 Mar 2008 23:37:12 -0500

lib9: gcc-4.2 bug in sprint

Diffstat:
Msrc/lib9/fmt/sprint.c | 5++++-
1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/src/lib9/fmt/sprint.c b/src/lib9/fmt/sprint.c @@ -16,8 +16,11 @@ sprint(char *buf, char *fmt, ...) /* * on PowerPC, the stack is near the top of memory, so * we must be sure not to overflow a 32-bit pointer. + * + * careful! gcc-4.2 assumes buf+len < buf can never be true and + * optimizes the test away. casting to uintptr works around this bug. */ - if(buf+len < buf) + if((uintptr)buf+len < (uintptr)buf) len = -(uintptr)buf-1; va_start(args, fmt);