hpc ignores files containing LINES pragmas that refer to .hsc files
ghc -hpc generates no ticks for files containing LINE pragmas that point back to .hsc files. Removing the LINE pragmas, and ticks are generated.
An example. This simple .hsc file:
main = print "hello, world"
Generates this A.hs file:
{-# LINE 1 "A.hsc" #-}
main = print "hello, world"
{-# LINE 2 "A.hsc" #-}
Compiling this with -fhpc, we see no ticks produced:
{ AbsBinds [] [] [Main.main <= [] main_aif]
Main.main :: GHC.IOBase.IO ()
[]
{ print_aie = System.IO.print @ [GHC.Base.Char] $dShow_ail
main_aif = print_aie "hello, world" }
:Main.main = GHC.TopHandler.runMainIO @ () Main.main
$dShow_ail = GHC.Show.$f21 @ GHC.Base.Char $dShow_aiW
$dShow_aiW = GHC.Show.$f18 }
Run this, and get the hpc report:
$ ./a.out
"hello, world"
$ hpc report a.out.tix
100% expressions used (0/0)
100% boolean coverage (0/0)
0/0 declarations.
However, an identical file, without LINE pragmas, goes through just fine:
$ ghc -fhpc B.hs -ddump-hpc
{ AbsBinds [] [] [Main.main <= [] main_aif]
Main.main :: GHC.IOBase.IO ()
[]
{ print_aie = System.IO.print @ [GHC.Base.Char] $dShow_ail
-- tick id = (2, [])
main_aif = tick<1>(print_aie (tick<0>("got you"))) }
:Main.main = GHC.TopHandler.runMainIO @ () Main.main
$dShow_ail = GHC.Show.$f21 @ GHC.Base.Char $dShow_aiW
$dShow_aiW = GHC.Show.$f18 }
And the result has valid hpc .tix
$ hpc report a.out.tix
100% expressions used (2/2)
100% boolean coverage (0/0)
Trac metadata
Trac field | Value |
---|---|
Version | 6.8.2 |
Type | Bug |
TypeOfFailure | OtherFailure |
Priority | normal |
Resolution | Unresolved |
Component | Code Coverage |
Test case | |
Differential revisions | |
BlockedBy | |
Related | |
Blocking | |
CC | dons@galois.com |
Operating system | Multiple |
Architecture | Multiple |