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

Mai*_*tor 24 haskell llvm

编译以下程序:

main = print (sqrt (-7))
Run Code Online (Sandbox Code Playgroud)

在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
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

Bri*_*汤莱恩 3

(评论中回答了问题。转换为社区 wiki 答案。请参阅没有答案的问题,但问题已在评论中解决(或在聊天中扩展)

\n\n

@leftaroundabout 写道:

\n\n
\n

我认为这是一个错误,尽管根据某些规范它很可能是可以接受的。LLVM 显然在这里触发了一些优化,假设参数为非负,从而使 \xe2\x88\x9a(-7) 成为未定义的行为。

\n
\n\n

@Ed'ka 写道:

\n\n
\n

可能相关:LLVM bug 21048

\n
\n