Floating infotables were reversed in C back end
authordias@eecs.harvard.edu <unknown>
Mon, 13 Oct 2008 15:27:18 +0000 (15:27 +0000)
committerdias@eecs.harvard.edu <unknown>
Mon, 13 Oct 2008 15:27:18 +0000 (15:27 +0000)
compiler/cmm/CmmBuildInfoTables.hs
compiler/cmm/PprC.hs

index 9a72166..f24aceb 100644 (file)
@@ -494,8 +494,9 @@ lowerSafeForeignCalls procpoints rst
          then lowerSafeCallBlock state' b
          else return (state' { s_blocks = insertBlock b blocks })
   State blocks' g_procpoints safeCalls <- fold_blocks block init g
-  return $ (ProcInfoTable (CmmProc info l args (LGraph entry off blocks')) g_procpoints
-               : safeCalls) : rst
+  return $ safeCalls
+           : [ProcInfoTable (CmmProc info l args (LGraph entry off blocks')) g_procpoints]
+           : rst
 
 -- Check for foreign calls -- if none, then we can avoid copying the block.
 hasSafeForeignCall :: CmmBlock -> Bool
index 374058f..3db1be5 100644 (file)
@@ -143,8 +143,9 @@ pprTop top@(CmmData _section (CmmDataLabel lbl : lits)) =
 -- Floating info table for safe a foreign call.
 pprTop top@(CmmData _section d@(_ : _))
   | CmmDataLabel lbl : lits <- reverse d = 
-  pprDataExterns lits $$
-  pprWordArray lbl lits  
+  let lits' = reverse lits
+  in pprDataExterns lits' $$
+     pprWordArray lbl lits'
 
 -- these shouldn't appear?
 pprTop (CmmData _ _) = panic "PprC.pprTop: can't handle this data"