【发布时间】:2012-09-11 00:11:21
【问题描述】:
我有一个简单的测试运行程序来解决我的 OpenPGP 模块 https://github.com/singpolyma/OpenPGP-Haskell/blob/master/Data/OpenPGP.hs 中的错误:
module Main where
import Data.OpenPGP
import Data.Binary (encode, decode)
packet = EmbeddedSignaturePacket (signaturePacket 2 168 ECDSA SHA256 [] [SignatureCreationTimePacket 1013401916,IssuerPacket "36FE856F4219F1C7"] 48065 [MPI 4,MPI 11,MPI 60,MPI 69,MPI 37,MPI 33,MPI 18,MPI 72,MPI 41,MPI 36,MPI 43,MPI 41,MPI 53,MPI 9,MPI 53,MPI 35,MPI 3,MPI 40,MPI 14,MPI 79,MPI 1,MPI 4,MPI 51,MPI 23,MPI 62,MPI 62,MPI 62,MPI 7,MPI 68,MPI 51,MPI 13,MPI 49,MPI 8,MPI 64,MPI 32,MPI 50,MPI 59,MPI 17,MPI 43,MPI 12,MPI 67,MPI 5,MPI 67,MPI 5,MPI 25,MPI 63,MPI 0,MPI 53,MPI 2,MPI 36,MPI 83,MPI 39,MPI 54,MPI 65,MPI 54,MPI 35,MPI 62,MPI 63,MPI 26,MPI 4,MPI 82,MPI 57,MPI 85,MPI 71,MPI 43,MPI 77])
main = print $ decode (encode packet) == packet
如果你编译这个(在 ghc 7.4.1 上):
ghc -O0 -fforce-recomp --make t.hs
它按预期工作(即,它打印True),但如果你像这样编译:
ghc -O1 -fforce-recomp --make t.hs
或者这个:
ghc -O2 -fforce-recomp --make t.hs
它将打印False。
我没有使用任何扩展(除了对 CPP 的微不足道的使用)或低级或不安全的调用,并且行为应该来自我的库而不是依赖项,因为它只是我的代码在此处重新编译。
【问题讨论】:
-
我可以在 GHC 7.4.2 中重现这个错误
-
当你观察到这个错误时,你使用的是二进制还是谷物?