Use takeUniqFromSupply in emitProcWithConvention
authorIan Lynagh <igloo@earth.li>
Thu, 21 Oct 2010 12:08:53 +0000 (12:08 +0000)
committerIan Lynagh <igloo@earth.li>
Thu, 21 Oct 2010 12:08:53 +0000 (12:08 +0000)
We were using the supply's unique, and then passing the same supply to
initUs_, which sounds like a bug waiting to happen.

compiler/codeGen/StgCmmMonad.hs

index f1823bd..f109251 100644 (file)
@@ -604,8 +604,9 @@ emitProcWithConvention :: Convention -> CmmInfo -> CLabel -> CmmFormals ->
                           CmmAGraph -> FCode ()
 emitProcWithConvention conv info lbl args blocks
   = do  { us <- newUniqSupply
-        ; let (offset, entry) = mkEntry (mkBlockId $ uniqFromSupply us) conv args
-              blks = initUs_ us $ lgraphOfAGraph $ entry <*> blocks
+        ; let (uniq, us') = takeUniqFromSupply us
+              (offset, entry) = mkEntry (mkBlockId uniq) conv args
+              blks = initUs_ us' $ lgraphOfAGraph $ entry <*> blocks
         ; let proc_block = CmmProc info lbl args ((offset, Just initUpdFrameOff), blks)
         ; state <- getState
         ; setState $ state { cgs_tops = cgs_tops state `snocOL` proc_block } }