
Hello, 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... Alberto 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.