FIX #1472 (also #249, which was not completely fixed previously): -caf-all bugs
authorSimon Marlow <simonmar@microsoft.com>
Sat, 7 Jul 2007 19:21:02 +0000 (19:21 +0000)
committerSimon Marlow <simonmar@microsoft.com>
Sat, 7 Jul 2007 19:21:02 +0000 (19:21 +0000)
compiler/profiling/SCCfinal.lhs

index 601aff4..256984a 100644 (file)
@@ -136,7 +136,7 @@ stgMassageForProfiling this_pkg mod_name us stg_binds
                          modl | Just m <- nameModule_maybe (idName binder) = m
                               | otherwise = mod_name
                     in
                          modl | Just m <- nameModule_maybe (idName binder) = m
                               | otherwise = mod_name
                     in
-                    collectCC  cc  `thenMM_`
+                    collectNewCC  cc  `thenMM_`
                     collectCCS ccs `thenMM_`
                     returnMM ccs
                else 
                     collectCCS ccs `thenMM_`
                     returnMM ccs
                else 
@@ -417,6 +417,14 @@ collectCC cc mod_name scope_cc us ids (local_ccs, extern_ccs, ccss)
     else -- must declare it "extern"
        ((local_ccs, cc : extern_ccs, ccss), ())
 
     else -- must declare it "extern"
        ((local_ccs, cc : extern_ccs, ccss), ())
 
+-- Version of collectCC used when we definitely want to declare this
+-- CC as local, even if its module name is not the same as the current
+-- module name (eg. the special :Main module) see bug #249, #1472, 
+-- test prof001,prof002.
+collectNewCC :: CostCentre -> MassageM ()
+collectNewCC cc mod_name scope_cc us ids (local_ccs, extern_ccs, ccss)
+  = ((cc : local_ccs, extern_ccs, ccss), ())
+
 collectCCS :: CostCentreStack -> MassageM ()
 
 collectCCS ccs mod_name scope_cc us ids (local_ccs, extern_ccs, ccss)
 collectCCS :: CostCentreStack -> MassageM ()
 
 collectCCS ccs mod_name scope_cc us ids (local_ccs, extern_ccs, ccss)