[Git][ghc/ghc][wip/T25549] 2 commits: base: Reintroduce {Show,Enum} IoSubSystem

Ben Gamari (@bgamari) gitlab at gitlab.haskell.org
Wed Dec 4 21:27:42 UTC 2024



Ben Gamari pushed to branch wip/T25549 at Glasgow Haskell Compiler / GHC


Commits:
aa96dde7 by Ben Gamari at 2024-12-04T16:24:39-05:00
base: Reintroduce {Show,Enum} IoSubSystem

To address #25549.

- - - - -
4dec7d02 by Ben Gamari at 2024-12-04T16:24:39-05:00
base: Revert GHC.RTS.Flags changes of !9676

Addresses #25549.

- - - - -


3 changed files:

- libraries/ghc-internal/src/GHC/Internal/IO/SubSystem.hs
- libraries/ghc-internal/src/GHC/Internal/RTS/Flags.hsc
- testsuite/tests/interface-stability/base-exports.stdout


Changes:

=====================================
libraries/ghc-internal/src/GHC/Internal/IO/SubSystem.hs
=====================================
@@ -1,6 +1,7 @@
 {-# LANGUAGE Trustworthy       #-}
-{-# LANGUAGE NoImplicitPrelude #-}
 {-# LANGUAGE CPP               #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE StandaloneDeriving #-}
 
 -----------------------------------------------------------------------------
 -- |
@@ -34,6 +35,8 @@ module GHC.Internal.IO.SubSystem (
  ) where
 
 import GHC.Internal.Base
+import GHC.Internal.Show
+import GHC.Internal.Enum
 
 #if defined(mingw32_HOST_OS)
 import GHC.Internal.IO.Unsafe
@@ -55,6 +58,10 @@ data IoSubSystem
               --   native APIs for I/O, including IOCP and RIO.
   deriving (Eq)
 
+-- N.B. These are currently unused by GHC but is needed for stability of @base at .
+deriving instance Enum IoSubSystem
+deriving instance Show IoSubSystem
+
 -- | Conditionally execute an action depending on the configured I/O subsystem.
 -- On POSIX systems always execute the first action.
 -- On Windows execute the second action if WINIO as active, otherwise fall back to


=====================================
libraries/ghc-internal/src/GHC/Internal/RTS/Flags.hsc
=====================================
@@ -49,6 +49,7 @@ module GHC.Internal.RTS.Flags
   , getTickyFlags
   , getParFlags
   , getHpcFlags
+  , getIoManagerFlag
   ) where
 
 #include "Rts.h"
@@ -65,6 +66,7 @@ import GHC.Internal.Base
 import GHC.Internal.Enum
 import GHC.Internal.Generics (Generic)
 import GHC.Internal.IO
+import GHC.Internal.IO.SubSystem
 import GHC.Internal.Real
 import GHC.Internal.Show
 
@@ -166,7 +168,7 @@ data MiscFlags = MiscFlags
     -- , linkerOptimistic      :: Bool
     , linkerMemBase         :: Word
       -- ^ address to ask the OS for memory for the linker, 0 ==> off
-    , ioManager             :: IoManagerFlag
+    , ioManager             :: IoSubSystem
     , numIoWorkerThreads    :: Word32
     } deriving ( Show -- ^ @since base-4.8.0.0
                , Generic -- ^ @since base-4.15.0.0
@@ -539,11 +541,14 @@ getMiscFlags = do
             <*> (toBool <$>
                   (#{peek MISC_FLAGS, linkerAlwaysPic} ptr :: IO CBool))
             <*> #{peek MISC_FLAGS, linkerMemBase} ptr
-            <*> (toEnum . fromIntegral
-                 <$> (#{peek MISC_FLAGS, ioManager} ptr :: IO Word32))
+            <*> return GHC.Internal.IO.SubSystem.ioSubSystem
             <*> (fromIntegral
                  <$> (#{peek MISC_FLAGS, numIoWorkerThreads} ptr :: IO Word32))
 
+-- | Needed to optimize support for different IO Managers on Windows.
+getIoManagerFlag :: IO IoSubSystem
+getIoManagerFlag = return GHC.Internal.IO.SubSystem.ioSubSystem
+
 getDebugFlags :: IO DebugFlags
 getDebugFlags = do
   let ptr = (#ptr RTS_FLAGS, DebugFlags) rtsFlagsPtr


=====================================
testsuite/tests/interface-stability/base-exports.stdout
=====================================
@@ -9112,7 +9112,7 @@ module GHC.RTS.Flags where
   type IoSubSystem :: *
   data IoSubSystem = IoPOSIX | IoNative
   type MiscFlags :: *
-  data MiscFlags = MiscFlags {tickInterval :: RtsTime, installSignalHandlers :: GHC.Types.Bool, installSEHHandlers :: GHC.Types.Bool, generateCrashDumpFile :: GHC.Types.Bool, generateStackTrace :: GHC.Types.Bool, machineReadable :: GHC.Types.Bool, disableDelayedOsMemoryReturn :: GHC.Types.Bool, internalCounters :: GHC.Types.Bool, linkerAlwaysPic :: GHC.Types.Bool, linkerMemBase :: GHC.Types.Word, ioManager :: IoManagerFlag, numIoWorkerThreads :: GHC.Internal.Word.Word32}
+  data MiscFlags = MiscFlags {tickInterval :: RtsTime, installSignalHandlers :: GHC.Types.Bool, installSEHHandlers :: GHC.Types.Bool, generateCrashDumpFile :: GHC.Types.Bool, generateStackTrace :: GHC.Types.Bool, machineReadable :: GHC.Types.Bool, disableDelayedOsMemoryReturn :: GHC.Types.Bool, internalCounters :: GHC.Types.Bool, linkerAlwaysPic :: GHC.Types.Bool, linkerMemBase :: GHC.Types.Word, ioManager :: IoSubSystem, numIoWorkerThreads :: GHC.Internal.Word.Word32}
   type ParFlags :: *
   data ParFlags = ParFlags {nCapabilities :: GHC.Internal.Word.Word32, migrate :: GHC.Types.Bool, maxLocalSparks :: GHC.Internal.Word.Word32, parGcEnabled :: GHC.Types.Bool, parGcGen :: GHC.Internal.Word.Word32, parGcLoadBalancingEnabled :: GHC.Types.Bool, parGcLoadBalancingGen :: GHC.Internal.Word.Word32, parGcNoSyncWithIdle :: GHC.Internal.Word.Word32, parGcThreads :: GHC.Internal.Word.Word32, setAffinity :: GHC.Types.Bool}
   type ProfFlags :: *
@@ -11692,6 +11692,7 @@ instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceStrictness -- Define
 instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceUnpackedness -- Defined in ‘GHC.Internal.Generics’
 instance GHC.Internal.Enum.Enum GHC.Internal.IO.Device.SeekMode -- Defined in ‘GHC.Internal.IO.Device’
 instance GHC.Internal.Enum.Enum GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’
+instance GHC.Internal.Enum.Enum GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’
 instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoCostCentres -- Defined in ‘GHC.Internal.RTS.Flags’
 instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoHeapProfile -- Defined in ‘GHC.Internal.RTS.Flags’
 instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoTrace -- Defined in ‘GHC.Internal.RTS.Flags’
@@ -12514,6 +12515,7 @@ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.Types.NewlineMode -- Defi
 instance [safe] GHC.Internal.Show.Show ghc-internal-9.1300.0:GHC.Internal.IO.Handle.Lock.Common.FileLockingNotSupported -- Defined in ‘ghc-internal-9.1300.0:GHC.Internal.IO.Handle.Lock.Common’
 instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.HandlePosn -- Defined in ‘GHC.Internal.IO.Handle’
 instance GHC.Internal.Show.Show GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’
+instance GHC.Internal.Show.Show GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’
 instance GHC.Internal.Show.Show GHC.Internal.IOPort.IOPortException -- Defined in ‘GHC.Internal.IOPort’
 instance GHC.Internal.Show.Show GHC.Internal.InfoProv.Types.InfoProv -- Defined in ‘GHC.Internal.InfoProv.Types’
 instance GHC.Internal.Show.Show GHC.Internal.RTS.Flags.CCFlags -- Defined in ‘GHC.Internal.RTS.Flags’



View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/579e9401167ee4d2f47f9b425e90e30b24d43de0...4dec7d02218875cc9540f6bd9ef09213b5cdc7c7

-- 
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/579e9401167ee4d2f47f9b425e90e30b24d43de0...4dec7d02218875cc9540f6bd9ef09213b5cdc7c7
You're receiving this email because of your account on gitlab.haskell.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-commits/attachments/20241204/20d211e2/attachment-0001.html>


More information about the ghc-commits mailing list