diff options
Diffstat (limited to 'compiler/GHC/ByteCode')
-rw-r--r-- | compiler/GHC/ByteCode/Asm.hs | 4 | ||||
-rw-r--r-- | compiler/GHC/ByteCode/Instr.hs | 3 |
2 files changed, 5 insertions, 2 deletions
diff --git a/compiler/GHC/ByteCode/Asm.hs b/compiler/GHC/ByteCode/Asm.hs index dd28b0076c..b6460f6925 100644 --- a/compiler/GHC/ByteCode/Asm.hs +++ b/compiler/GHC/ByteCode/Asm.hs @@ -177,7 +177,9 @@ assembleBCO platform (ProtoBCO { protoBCOName = nm -- this BCO to be long. (n_insns0, lbl_map0) = inspectAsm platform False initial_offset asm ((n_insns, lbl_map), long_jumps) - | isLarge n_insns0 = (inspectAsm platform True initial_offset asm, True) + | isLarge (fromIntegral $ Map.size lbl_map0) + || isLarge n_insns0 + = (inspectAsm platform True initial_offset asm, True) | otherwise = ((n_insns0, lbl_map0), False) env :: LocalLabel -> Word diff --git a/compiler/GHC/ByteCode/Instr.hs b/compiler/GHC/ByteCode/Instr.hs index 4186c81045..89b59bfb4b 100644 --- a/compiler/GHC/ByteCode/Instr.hs +++ b/compiler/GHC/ByteCode/Instr.hs @@ -50,7 +50,8 @@ data ProtoBCO a protoBCOFFIs :: [FFIInfo] } -newtype LocalLabel = LocalLabel { getLocalLabel :: Word16 } +-- | A local block label (e.g. identifying a case alternative). +newtype LocalLabel = LocalLabel { getLocalLabel :: Word32 } deriving (Eq, Ord) instance Outputable LocalLabel where |