Code breaks with '-O', any ideas.

David Brown haskell2 at
Mon Mar 5 16:21:42 EST 2007

David Brown wrote:
> Ian Lynagh wrote:
>> On Mon, Mar 05, 2007 at 10:51:46AM -0800, David Brown wrote:
>>> My program '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.


More information about the Glasgow-haskell-users mailing list