
David Brown wrote:
Ian Lynagh wrote:
On Mon, Mar 05, 2007 at 10:51:46AM -0800, David Brown wrote:
My program 'harchive' http://www.davidb.org/darcs/harchive/ breaks if compiled with '-O'. Just wondering if anyone has suggestions on how to figure out what might be causing this. What do you mean by "breaks"?
I'm now rebuilding individual parts with -O to see if I can isolate the problem(s).
Well, that helped. I found the problem. I had something like: import qualified Data.ByteString as B let hash = B.pack $ replicate (#const SHA_DIGEST_LENGTH) 0 ... B.useAsCStringLen hash $ \ (hdata, _) -> do c_sha1Final hash ctx return hash But this seems to be causing the hash to be garbage, and possibly have c_sha1Final write a 20-byte hash into some garbled piece of memory. Ireplaced this with let hashLen = (#const SHA_DIGEST_LENGTH) hashData <- mallocForeignPtrBytes hashLen withForeignPtr hashData $ \hashP -> do c_sha1Final hashP ctx B.copyCStringLen (hashP, hashLen) and the code works both with and without optimization. Dave