Skip to content

Quasiquote or TH linking may need HPC flag

Test quasiquotation/qq005 fails in the hpc way:

'/64playpen/simonpj/builds/HEAD-1/ghc/stage2-inplace/ghc' -fforce-recomp -dcore-lint -dcmm-lint -Dx86_64_unknown_linux  -dno-debug-output -c -o qq005 Main.hs -O -fhpc
Loading package ghc-prim ... linking ... done.
Loading package integer ... linking ... done.
Loading package base ... linking ... done.
Loading package ffi-1.0 ... linking ... done.
Loading package syb ... linking ... done.
Loading package array-0.2.0.0 ... linking ... done.
Loading package packedstring-0.1.0.1 ... linking ... done.
Loading package containers-0.2.0.0 ... linking ... done.
Loading package pretty-1.0.1.0 ... linking ... done.
Loading package template-haskell ... linking ... done.
Loading package parsec-2.1.0.1 ... linking ... done.
ghc: ./Expr.o: unknown symbol `hs_hpc_module'

I believe the reason is this:

  • Expr.hs contains a quasiquote parser
  • This parser is invoked in Main.hs
  • But Expr.hs is compiled with -fhpc and contains a reference to the RTS function hs_hpc_module
  • When doing dynamic linking of Expr.o (to run the quasiquote parser) the linker can't find hs_hpc_module. (Even though Main.hs is also compiled with -fhpc.

The same thing happens with Template Haskell. (Try running the th tests with the hpc way. Not all tests fail, but some do, with the same error.)

I'm no expert on the dynamic linking part. Is hs_hpc_module (defined in rts/Hpc.c) always part of the RTS? Does it need to be added to a list I vaguely recall, of externally linkable symbols (perhaps RTS_SYMBOLS in rts/Linker.c) [PS: some comments explaining these lists would be v useful]? Or what?

I'll milestone this for 6.10.1, because it does seem a bug that TH and HPC don't mix; but it should probably not hold up the release.

Simon

Trac metadata
Trac field Value
Version 6.8.3
Type Bug
TypeOfFailure OtherFailure
Priority normal
Resolution Unresolved
Component Compiler
Test case
Differential revisions
BlockedBy
Related
Blocking
CC
Operating system
Architecture
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information