
#14626: No need to enter a scrutinised value -------------------------------------+------------------------------------- Reporter: heisenbug | Owner: heisenbug Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 8.2.2 Resolution: | Keywords: performance Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: #13861 | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by heisenbug): Replying to [comment:23 simonpj]:
getSymtabName should somehow check the getTag# of the presumably strict fields and if any of them is 0, seq it?
I don't think so. Here's its code: {{{ getSymtabName _ncu _dict symtab bh = do i :: Word32 <- get bh case i .&. 0xC0000000 of 0x00000000 -> return $! symtab ! fromIntegral i
0x80000000 -> let tag = chr (fromIntegral ((i .&. 0x3FC00000) `shiftR` 22)) ix = fromIntegral i .&. 0x003FFFFF u = mkUnique tag ix in return $! case lookupKnownKeyName u of Nothing -> pprPanic "getSymtabName:unknown known- key unique" (ppr i $$ ppr (unpkUnique u)) Just n -> n
_ -> pprPanic "getSymtabName:unknown name tag" (ppr i) }}} The only way it can return a `Name` is either as a result of `lookupKownKeyName` or as ar result of indexing `symtab`. Both should return properly formed names. Maybe somehow one of them isn't? But which one?
I bet it comes from the call to `getDictionary` in `BinIface.hs`. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/14626#comment:24 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler