为什么用-fllvm编译这个Haskell程序会产生不同的结果?

时间:2015-01-20 19:17:16

标签: haskell llvm

编译以下程序:

main = print (sqrt (-7))

在OSX Yosemite,LLVM版本3.4.2,目标x86_64-apple-darwin14.0.0,GHC 7.8.4产生两种不同的结果,具体取决于llvm使用:

apple1$ ghc -fforce-recomp a.hs -o a; ./a
[1 of 1] Compiling Main             ( a.hs, a.o )
Linking a ...
NaN

apple1$ ghc -fforce-recomp -fllvm a.hs -o a; ./a
[1 of 1] Compiling Main             ( a.hs, a.o )
Linking a ...
0.0

为什么会这样?

1 个答案:

答案 0 :(得分:3)

(问题在评论中回答。转换为社区维基答案。见Question with no answers, but issue solved in the comments (or extended in chat)

@leftaroundabout写道:

  

我认为这是一个错误,尽管根据某些规范它可能是可以接受的。 LLVM明显地在这里激发了一些优化,假设非负参数,使得√(-7)未定义的行为。

@ Ed' ka写道:

  

可能相关:LLVM bug 21048