[Haskell-cafe] ghc 6.8.1 bug?

Alberto Ruiz aruiz at um.es
Thu Nov 15 03:43:47 EST 2007


I have had exactly the same problem with my bindings to GSL, BLAS and LAPACK. 
The foreign functions (!) randomly (but very frequently) produced NaN with 
ghc-6.8.1 -O. As usual, I first thought that I had a subtle bug related to 
the foreign pointers, but after a lot of refactoring, experiments, and 
tracing everything, I'm reasonably sure that memory is safely used. What I 
have found is that the same errors can be reproduced on ghc-6.6.1 
with -O -fasm. So I tried -O -fvia-C on ghc-6.8.1 (which now it is not the 
default) and apparently everything works well. So it seems that now the ffi 
requires and additional and explicit -fvia-C. In any case I don't know 
why -fasm produces those strange NaN in precompiled foreign functions...


On Thursday 15 November 2007 09:05, SevenThunders wrote:
> The good news is that my code compiles without error and much faster under
> ghc 6.8.1.
> The bad news is that there appear to be subtle bugs that did not occur when
> I compiled things under
> 6.6.1.  One issue is that my code is somewhat complex and links into a  C
> library as well.
> The new behavior is that under certain conditions a certain matrix inner
> product produces undefined floats, that should not be there.  If the code
> is executed inside any function it fails but if the same code is reexecuted
> at the ghci prompt it works.  Here is the gist of the code that I'm running
> main = do
>     ... lots of computations and let clauses
>     -- get a submatrix
>       viewMatbotk wstart nsua su 1 suw
>     -- get another submatrix
>       viewMatbotk 0 nsua arrstart npaths sua
>      -- complex non conjugated inner product (multiply the two submatrices)
>     mulCFtF
>     mprint
> If this is executed either in ghci as main or from a Dos prompt I get
> a matrix filled with bad values including a few that look like
> -1.#IND+1.87514i
> If I recompile everything in ghc-6.6.1 it works like  charm.  I make sure
> that I have deleted all the .o and .hi files.  There is a dll that contains
> a C library I link to via running dlltool.exe.   If I print out all the
> function inputs to the function viewMatbotk and then call them
> interactively in ghc 6.8.1 and call mulCFtF interactively it works
> correctly.  both viewMatbotk  and mulCFtF are C routines pulled in from the
> external library.
> I am at a complete loss how to debug this or how to pin down what exactly
> has changed between 6.6.1 and 6.8.1 that breaks this code so badly.  This
> type of error stinks of some kind of memory issue, e.g. corrupted pointers.
> Any suggestions would be appreciated.  Unfortunately the code base is
> rather involved and potentially proprietary so I can't publish all of the
> details.

More information about the Haskell-Cafe mailing list