diff --git a/ghc/compiler/nativeGen/StixInfo.lhs b/ghc/compiler/nativeGen/StixInfo.lhs index 61bd8ec7f1faaf4644ce3cddf43220531278120f..1bfefc32d6fd6592f6837a1d9c424c7c1dabc305 100644 --- a/ghc/compiler/nativeGen/StixInfo.lhs +++ b/ghc/compiler/nativeGen/StixInfo.lhs @@ -14,7 +14,7 @@ import StgSyn ( SRT(..) ) import ClosureInfo ( closurePtrsSize, closureNonHdrSize, closureSMRep, infoTableLabelFromCI, - infoTblNeedsSRT, getSRTInfo + infoTblNeedsSRT, getSRTInfo, closureSemiTag ) import PrimRep ( PrimRep(..) ) import SMRep ( SMRep(..), getSMRepClosureTypeInt ) @@ -22,6 +22,7 @@ import Stix -- all of it import UniqSupply ( returnUs, UniqSM ) import Outputable ( int ) import BitSet ( intBS ) +import Maybes ( maybeToBool ) import Bits import Word @@ -68,6 +69,8 @@ genCodeInfoTable (CClosureInfoAndCode cl_info _ _ cl_descr) srt = getSRTInfo cl_info (srt_label,srt_len) + | is_constr + = (StInt 0, tag) | needs_srt = case srt of (lbl, SRT off len) -> @@ -76,6 +79,10 @@ genCodeInfoTable (CClosureInfoAndCode cl_info _ _ cl_descr) | otherwise = (StInt 0, 0) + maybe_tag = closureSemiTag cl_info + is_constr = maybeToBool maybe_tag + (Just tag) = maybe_tag + layout_info :: Word32 #ifdef WORDS_BIGENDIAN layout_info = (fromInt ptrs `shiftL` 16) .|. fromInt nptrs