From 6d4c89ea724a0b27878b10cb214c2bb3740f5bd9 Mon Sep 17 00:00:00 2001 From: leitner Date: Sat, 25 Oct 2008 21:21:46 +0000 Subject: [PATCH] byte_zero is also miscompiled by gcc 4.3.2 --- CHANGES | 1 + byte/byte_zero.c | 9 +++++++++ test/byte_copy.c | 51 ++++++++++++++++++++++++++++++++++++++++-------- 3 files changed, 53 insertions(+), 8 deletions(-) diff --git a/CHANGES b/CHANGES index 678db43..b471232 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,7 @@ 0.28: add uint64 pack and unpack routines fix subtle typo in sub_of (David Sirovsky) + work around gcc bugs 0.27: add fmt_strm diff --git a/byte/byte_zero.c b/byte/byte_zero.c index 5a4ebb4..faf7864 100644 --- a/byte/byte_zero.c +++ b/byte/byte_zero.c @@ -2,6 +2,14 @@ /* byte_zero sets the bytes out[0], out[1], ..., out[len-1] to 0 */ void byte_zero(void* out, size_t len) { +#if 1 + /* gcc 4.3.1 generates wrong code for this, so I'm switching to + * simpler code */ + register char* s=out; + size_t i; + for (i=0; i #include "errmsg.h" #include @@ -11,26 +12,60 @@ int main() { // carp("both aligned"); byte_copy(buf,16,text); - if (memcmp(buf,"this is a test!\n\0",18)) - die(1,"fail 1"); + assert(memcmp(buf,"this is a test!\n\0",18)==0); memset(buf,0,sizeof(buf)); // carp("destination aligned, source unaligned"); byte_copy(buf,15,text+1); - if (memcmp(buf,"his is a test!\n\0\0",18)) - die(1,"fail 2"); + assert(memcmp(buf,"his is a test!\n\0\0",18)==0); memset(buf,0,sizeof(buf)); // carp("destination unaligned, source aligned"); byte_copy(buf+1,15,text); - if (memcmp(buf,"\0this is a test!\0\0",18)) - die(1,"fail 3"); + assert(memcmp(buf,"\0this is a test!\0\0",18)==0); memset(buf,0,sizeof(buf)); // carp("both unaligned"); byte_copy(buf+1,10,text+3); - if (memcmp(buf,"\0s is a tes\0\0",14)) - die(1,"fail 4"); + assert(memcmp(buf,"\0s is a tes\0\0",14)==0); + + memset(buf,0,sizeof(buf)); + byte_copyr(buf,16,text); + assert(memcmp(buf,"this is a test!\n\0",18)==0); + + memset(buf,0,sizeof(buf)); + byte_copyr(buf,15,text+1); + assert(memcmp(buf,"his is a test!\n\0\0",18)==0); + + memset(buf,0,sizeof(buf)); + byte_copyr(buf+1,15,text); + assert(memcmp(buf,"\0this is a test!\0\0",18)==0); + + memset(buf,0,sizeof(buf)); + byte_copyr(buf+1,10,text+3); + assert(memcmp(buf,"\0s is a tes\0\0",14)==0); + + memset(buf,0,sizeof(buf)); + byte_copy(buf,16,text); + byte_copy(buf,16,buf+1); + assert(memcmp(buf,"his is a test!\n\0\0",18)==0); + + memset(buf,0,sizeof(buf)); + byte_copy(buf,16,text); + byte_copyr(buf+1,16,buf); + assert(memcmp(buf,"tthis is a test!\n",18)==0); + + assert(byte_diff(text,15,"this is a test!")==0); + assert(byte_diff(text,16,"this is a test!")>0); + assert(byte_diff("this is a test!",16,text)<0); + + assert(byte_chr("0123456789abcdef",17,'9')==9); + assert(byte_rchr("0123456789abcdef",17,'9')==9); + assert(byte_chr("0123456789abcdef",17,'A')==17); + assert(byte_rchr("0123456789abcdef",17,'A')==17); + + byte_zero(buf,16); + assert(byte_equal(buf,16,"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0")); return 0; }