diff options
author | Simon Marlow <simonmar@microsoft.com> | 2007-02-28 15:50:09 +0000 |
---|---|---|
committer | Simon Marlow <simonmar@microsoft.com> | 2007-02-28 15:50:09 +0000 |
commit | e07e2550074ddc7d96e2092e56add418403bd29a (patch) | |
tree | b3017d2d151644f020d8b83e01864baf236dc50e /compiler/profiling/SCCfinal.lhs | |
parent | dce3fd4efcb90f61b115a400559ef687a11f2c53 (diff) | |
download | haskell-e07e2550074ddc7d96e2092e56add418403bd29a.tar.gz |
Fix #249 (-caf-all bugs)
There were two bugs:
* we were generating the symbol name for the CAF
cost centre from the OccName, which isn't unique enough
in the case of system-generated non-external names
* :Main.main caused problems, because we were assuming that
every top-level CAF was from the current module.
Diffstat (limited to 'compiler/profiling/SCCfinal.lhs')
-rw-r--r-- | compiler/profiling/SCCfinal.lhs | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/compiler/profiling/SCCfinal.lhs b/compiler/profiling/SCCfinal.lhs index d27a3a0c4a..7aaf109697 100644 --- a/compiler/profiling/SCCfinal.lhs +++ b/compiler/profiling/SCCfinal.lhs @@ -32,7 +32,8 @@ import StgSyn import PackageConfig ( PackageId ) import StaticFlags ( opt_AutoSccsOnIndividualCafs ) import CostCentre -- lots of things -import Id ( Id ) +import Id +import Name import Module ( Module ) import UniqSupply ( splitUniqSupply, UniqSupply ) #ifdef PROF_DO_BOXING @@ -128,8 +129,13 @@ stgMassageForProfiling this_pkg mod_name us stg_binds -- Top level CAF without a cost centre attached -- Attach CAF cc (collect if individual CAF ccs) = (if opt_AutoSccsOnIndividualCafs - then let cc = mkAutoCC binder mod_name CafCC + then let cc = mkAutoCC binder modl CafCC ccs = mkSingletonCCS cc + -- careful: the binder might be :Main.main, + -- which doesn't belong to module mod_name. + -- bug #249, tests prof001, prof002 + modl | Just m <- nameModule_maybe (idName binder) = m + | otherwise = mod_name in collectCC cc `thenMM_` collectCCS ccs `thenMM_` |