[GHC] #14626: No need to enter a scrutinised value
GHC
ghc-devs at haskell.org
Thu Jan 11 22:52:07 UTC 2018
#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 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?
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/14626#comment:23>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list