tlib9: gcc-4.2 bug in sprint - plan9port - [fork] Plan 9 from user space
(HTM) git clone git://src.adamsgaard.dk/plan9port
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
(DIR) commit 34167aa6b0d7d53016b8574b4fe1fac764ddf615
(DIR) parent b32d9d9c2e07681450a7ea1801b07e5727fa39e2
(HTM) Author: Russ Cox <rsc@swtch.com>
Date: Mon, 3 Mar 2008 23:37:12 -0500
lib9: gcc-4.2 bug in sprint
Diffstat:
M src/lib9/fmt/sprint.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
---
(DIR) diff --git a/src/lib9/fmt/sprint.c b/src/lib9/fmt/sprint.c
t@@ -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);