<div dir="ltr"><div>I've noticed some suspicious code in base:GHC.IO.Encoding.</div><font face="courier new,monospace"><div> </div><blockquote style="margin-right:0px"><div>setLocaleEncoding, setFileSystemEncoding, setForeignEncoding :: TextEncoding -> IO ()</div>
<div> </div><div>(getLocaleEncoding, setLocaleEncoding) = mkGlobal initLocaleEncoding</div><div> </div><div>(getFileSystemEncoding, setFileSystemEncoding) = mkGlobal initFileSystemEncoding</div></blockquote><blockquote style="margin-right:0px">
<div>(getForeignEncoding, setForeignEncoding) = mkGlobal initForeignEncoding</div></blockquote></font><font face="courier new,monospace"><div> </div><blockquote style="margin-right:0px"><div>mkGlobal :: a -> (IO a, a -> IO ())</div>
<div>mkGlobal x = unsafePerformIO $ do</div><div> x_ref <- newIORef x</div><div> return (readIORef x_ref, writeIORef x_ref)</div></blockquote></font><blockquote style="margin-right:0px"><div><font face="courier new,monospace"></font> </div>
</blockquote><div>I've not elided any pragmas and there's no relevant LANGUAGE or OPTIONS pragmas.</div><div> </div><div>With HEAD from a couple weeks ago, mkGlobal is not getting inlined. But with some of my experimental alterations of sizeExpr, it is getting inlined.</div>
<div> </div><div>So this code should probably have some of the guards for faking global variables, right?</div></div>