[GHC] #2224: -fhpc inteferes/prevents rewrite rules from firing
GHC
ghc-devs at haskell.org
Sat Dec 6 00:02:39 UTC 2014
#2224: -fhpc inteferes/prevents rewrite rules from firing
-------------------------------------+-------------------------------------
Reporter: dons | Owner: andy@…
Type: bug | Status: new
Priority: lowest | Milestone: 7.10.1
Component: Code | Version: 6.8.2
Coverage | Keywords: rules, hpc
Resolution: | Architecture: Unknown/Multiple
Operating System: | Difficulty: Unknown
Unknown/Multiple | Blocked By:
Type of failure: | Related Tickets:
None/Unknown |
Test Case: |
Blocking: |
Differential Revisions: |
-------------------------------------+-------------------------------------
Changes (by thomie):
* failure: => None/Unknown
Old description:
> Use case:
>
> I'm writing tests for rewrite rules, and using HPC to determine if rules
> were fired (and their code exercised). HPC is quite cool here, since it
> lets us see which rules fired, without needing to explicitly export
> functions to test.
>
> However, -fhpc seems to prevent many rules from firing (likely due to
> ticks getting in the way?)
>
> For example:
>
> {{{
> import qualified Data.ByteString.Char8 as C
>
> main = print (C.pack "literal")
> }}}
>
> When compiled normally, triggers a nice rewrite rule:
>
> {{{
> $ ghc -O2 A.hs -ddump-simpl-stats A.hs -c
>
> 1 ByteString pack/packAddress
> }}}
>
> Now with -fhpc:
>
> {{{
> 2 RuleFired
> 1 unpack
> 1 unpack-list
> }}}
>
> What's the best way to ensure the same code is exercised with and without
> -fhpc here? (I'd quite like to get this working, since rewrite rules
> benefit from testing.)
New description:
Use case:
I'm writing tests for rewrite rules, and using HPC to determine if rules
were fired (and their code exercised). HPC is quite cool here, since it
lets us see which rules fired, without needing to explicitly export
functions to test.
However, -fhpc seems to prevent many rules from firing (likely due to
ticks getting in the way?)
For example:
{{{
import qualified Data.ByteString.Char8 as C
main = print (C.pack "literal")
}}}
When compiled normally, triggers a nice rewrite rule:
{{{
$ ghc -O2 A.hs -ddump-rule-firings A.hs -c
Rule fired: unpack
Rule fired: Class op show
Rule fired: unpack-list
Rule fired: ByteString packChars/packAddress
Rule fired: unpack
Rule fired: Class op show
Rule fired: unpack-list
Rule fired: ByteString packChars/packAddres
}}}
Now with -fhpc:
{{{
$ ghc -O2 A.hs -ddump-rule-firings A.hs -c -fhpc
Rule fired: unpack
Rule fired: Class op show
Rule fired: unpack-list
Rule fired: unpack
Rule fired: Class op show
Rule fired: unpack-list
}}}
What's the best way to ensure the same code is exercised with and without
-fhpc here? (I'd quite like to get this working, since rewrite rules
benefit from testing.)
--
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/2224#comment:16>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list