2015-01-20 155 views
24

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

main = print (sqrt (-7)) 

在OSX约塞米蒂,LLVM版本3.4.2,目标x86_64的-苹果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 

为什么会发生这种情况?

+2

LLVM 3.4与GHC 7.8.4和7.8.3在x64的Linux提供了NaN的两者。 – 2015-01-20 20:52:21

+1

您使用的是什么版本的GHC?这显然是/是一个错误。 – dfeuer 2015-01-20 22:19:13

+6

我会认为它是一个错误,尽管根据某些规范它可能已被接受。 LLVM显然在这里推出了一些优化,它假设了非负的参数,使得√(-7)未定义的行为。 – leftaroundabout 2015-01-20 22:47:39

回答

相关问题