Brandon Chinn pushed to branch wip/T26961 at Glasgow Haskell Compiler / GHC

Commits:

24 changed files:

Changes:

  • changelog.d/T27022
    1
    +section: compiler
    
    2
    +synopsis: Fix a divergence in the interaction between ``recover`` and ``putQ`` between the internal and external interpreter
    
    3
    +description: The ``recover`` method in TemplateHaskell now behaves the same 
    
    4
    +  with the internal and external interpreter.
    
    5
    +  In the past, when an error was encountered in a computation in a ``recover`` block,
    
    6
    +  the external interpreter would discard any state changes from ``putQ``,
    
    7
    +  whereas the internal interpreter would not.
    
    8
    +  This was a long-standing error in the implementation of the external interpreter.
    
    9
    +  Both now keep state changes from ``putQ`` in ``recover`` blocks.
    
    10
    +mrs: !15994
    
    11
    +issues: #27022

  • changelog.d/dynamic-trace-flags
    1
    +section: compiler
    
    2
    +synopsis: Support dynamic trace flags in RTS
    
    3
    +issues: #27186
    
    4
    +mrs: !15936
    
    5
    +
    
    6
    +description: {
    
    7
    +    The RTS API now exposes the `RUNTIME_TRACE_FLAG` type and
    
    8
    +    the `getTraceFlags` and `setTraceFlags` functions that can be used to
    
    9
    +    change the trace flags at runtime.
    
    10
    +}

  • hadrian/src/Settings/Packages.hs
    ... ... @@ -322,6 +322,7 @@ rtsPackageArgs = package rts ? do
    322 322
               , Profiling `wayUnit` way          ? arg "-DPROFILING"
    
    323 323
               , Threaded  `wayUnit` way          ? arg "-DTHREADED_RTS"
    
    324 324
               , notM targetSupportsSMP           ? arg "-optc-DNOSMP"
    
    325
    +          , isWinHost                        ? arg "-optl-Wl,--disable-runtime-pseudo-reloc"
    
    325 326
     
    
    326 327
                 -- See Note [AutoApply.cmm for vectors] in genapply/Main.hs
    
    327 328
                 --
    

  • libraries/base/base.cabal.in
    ... ... @@ -111,6 +111,7 @@ Library
    111 111
             , Data.Monoid
    
    112 112
             , Data.Ord
    
    113 113
             , Data.Proxy
    
    114
    +        , Data.RealFloat
    
    114 115
             , Data.STRef
    
    115 116
             , Data.STRef.Strict
    
    116 117
             , Data.String
    

  • libraries/base/changelog.md
    ... ... @@ -2,6 +2,8 @@
    2 2
     
    
    3 3
     ## 4.24.0.0 *TBA*
    
    4 4
       * Add `Bounded` instances for `Double`, `Float`, `CDouble` and `CFloat`. ([CLC proposal #402](https://github.com/haskell/core-libraries-committee/issues/402))
    
    5
    +  * Add new `Data.RealFloat` module re-exporting `RealFloat` from `GHC.Float` ([CLC proposal #394](https://github.com/haskell/core-libraries-committee/issues/394))
    
    6
    +  * Add `Infinity`, `NegInfinity`, and `NaN` pattern synonyms to `Data.RealFloat` ([CLC proposal #394](https://github.com/haskell/core-libraries-committee/issues/394))
    
    5 7
     
    
    6 8
     ## 4.23.0.0 *TBA*
    
    7 9
       * Add `System.IO.hGetNewlineMode`. ([CLC proposal #370](https://github.com/haskell/core-libraries-committee/issues/370))
    

  • libraries/base/src/Data/RealFloat.hs
    1
    +{-# LANGUAGE PatternSynonyms #-}
    
    2
    +{-# LANGUAGE Safe #-}
    
    3
    +{-# LANGUAGE ViewPatterns #-}
    
    4
    +
    
    5
    +-- |
    
    6
    +--
    
    7
    +-- Module      :  Data.RealFloat
    
    8
    +-- Copyright   :  (c) The University of Glasgow 2026
    
    9
    +-- License     :  BSD-style (see the file libraries/base/LICENSE)
    
    10
    +--
    
    11
    +-- Maintainer  :  libraries@haskell.org
    
    12
    +-- Stability   :  stable
    
    13
    +-- Portability :  portable
    
    14
    +--
    
    15
    +
    
    16
    +module Data.RealFloat (
    
    17
    +  RealFloat (..),
    
    18
    +
    
    19
    +  -- * Infinity + NaN
    
    20
    +  pattern Infinity,
    
    21
    +  pattern NegInfinity,
    
    22
    +  pattern NaN,
    
    23
    +) where
    
    24
    +
    
    25
    +import Data.Bool (Bool (..), (&&))
    
    26
    +import GHC.Internal.Data.Ord ((<), (>))
    
    27
    +import GHC.Internal.Float (RealFloat (..))
    
    28
    +import GHC.Internal.Real ((/))
    
    29
    +
    
    30
    +pattern Infinity :: (RealFloat a) => a
    
    31
    +pattern Infinity <- ((\x -> isInfinite x && x > 0) -> True) where Infinity = 1/0
    
    32
    +
    
    33
    +-- | Negative infinity
    
    34
    +--
    
    35
    +-- Provided for convenience. Could also use the following instead:
    
    36
    +--   * Pattern matching: @(negate -> Infinity)@
    
    37
    +--   * Expressions: @-Infinity@
    
    38
    +pattern NegInfinity :: (RealFloat a) => a
    
    39
    +pattern NegInfinity <- ((\x -> isInfinite x && x < 0) -> True) where NegInfinity = -1/0
    
    40
    +
    
    41
    +-- | A pattern synonym for NaN values.
    
    42
    +--
    
    43
    +-- Note: Per IEEE 754, NaN is never equal to itself, thus these two snippets
    
    44
    +-- have different behavior:
    
    45
    +--
    
    46
    +-- @
    
    47
    +-- -- foo1 NaN == "a"
    
    48
    +-- foo1 NaN = "a"
    
    49
    +-- foo1 _ = "b"
    
    50
    +--
    
    51
    +-- -- foo2 NaN == "b"
    
    52
    +-- foo2 x = if x == NaN then "a" else "b"
    
    53
    +-- @
    
    54
    +pattern NaN :: (RealFloat a) => a
    
    55
    +pattern NaN <- (isNaN -> True) where NaN = 0/0

  • libraries/ghci/GHCi/TH.hs
    ... ... @@ -119,7 +119,7 @@ initQState :: Pipe -> QState
    119 119
     initQState p = QState M.empty Nothing p
    
    120 120
     
    
    121 121
     -- | The monad in which we run TH computations on the server
    
    122
    -newtype GHCiQ a = GHCiQ { runGHCiQ :: QState -> IO (a, QState) }
    
    122
    +newtype GHCiQ a = GHCiQ { runGHCiQ :: IORef QState -> IO a }
    
    123 123
     
    
    124 124
     -- | The exception thrown by "fail" in the GHCiQ monad
    
    125 125
     data GHCiQException = GHCiQException QState String
    
    ... ... @@ -128,52 +128,54 @@ data GHCiQException = GHCiQException QState String
    128 128
     instance Exception GHCiQException
    
    129 129
     
    
    130 130
     instance Functor GHCiQ where
    
    131
    -  fmap f (GHCiQ s) = GHCiQ $ fmap (\(x,s') -> (f x,s')) . s
    
    131
    +  fmap f (GHCiQ m) = GHCiQ $ fmap f . m
    
    132 132
     
    
    133 133
     instance Applicative GHCiQ where
    
    134 134
       f <*> a = GHCiQ $ \s ->
    
    135
    -    do (f',s')  <- runGHCiQ f s
    
    136
    -       (a',s'') <- runGHCiQ a s'
    
    137
    -       return (f' a', s'')
    
    138
    -  pure x = GHCiQ (\s -> return (x,s))
    
    135
    +    do f'  <- runGHCiQ f s
    
    136
    +       a' <- runGHCiQ a s
    
    137
    +       return $ f' a'
    
    138
    +  pure x = GHCiQ $ \_ -> return x
    
    139 139
     
    
    140 140
     instance Monad GHCiQ where
    
    141 141
       m >>= f = GHCiQ $ \s ->
    
    142
    -    do (m', s')  <- runGHCiQ m s
    
    143
    -       (a,  s'') <- runGHCiQ (f m') s'
    
    144
    -       return (a, s'')
    
    142
    +    do m'  <- runGHCiQ m s
    
    143
    +       a <- runGHCiQ (f m') s
    
    144
    +       return a
    
    145 145
     
    
    146 146
     instance MonadFail GHCiQ where
    
    147
    -  fail err  = GHCiQ $ \s -> throwIO (GHCiQException s err)
    
    147
    +  fail err  = GHCiQ $ \sRef -> readIORef sRef >>= \s -> throwIO (GHCiQException s err)
    
    148 148
     
    
    149 149
     getState :: GHCiQ QState
    
    150
    -getState = GHCiQ $ \s -> return (s,s)
    
    150
    +getState = GHCiQ $ \sRef -> readIORef sRef
    
    151 151
     
    
    152 152
     noLoc :: TH.Loc
    
    153 153
     noLoc = TH.Loc "<no file>" "<no package>" "<no module>" (0,0) (0,0)
    
    154 154
     
    
    155 155
     -- | Send a 'THMessage' to GHC and return the result.
    
    156 156
     ghcCmd :: Binary a => THMessage (THResult a) -> GHCiQ a
    
    157
    -ghcCmd m = GHCiQ $ \s -> do
    
    157
    +ghcCmd m = GHCiQ $ \sRef -> do
    
    158
    +  s <- readIORef sRef
    
    158 159
       r <- remoteTHCall (qsPipe s) m
    
    159 160
       case r of
    
    160 161
         THException str -> throwIO (GHCiQException s str)
    
    161
    -    THComplete res -> return (res, s)
    
    162
    +    THComplete res -> return res
    
    162 163
     
    
    163 164
     instance MonadIO GHCiQ where
    
    164
    -  liftIO m = GHCiQ $ \s -> fmap (,s) m
    
    165
    +  liftIO m = GHCiQ $ \_ -> m
    
    165 166
     
    
    166 167
     instance TH.Quasi GHCiQ where
    
    167 168
       qNewName str = ghcCmd (NewName str)
    
    168 169
       qReport isError msg = ghcCmd (Report isError msg)
    
    169 170
     
    
    170 171
       -- See Note [TH recover with -fexternal-interpreter] in GHC.Tc.Gen.Splice
    
    171
    -  qRecover (GHCiQ h) a = GHCiQ $ \s -> mask $ \unmask -> do
    
    172
    +  qRecover (GHCiQ h) a = GHCiQ $ \sRef -> mask $ \unmask -> do
    
    173
    +    s <- readIORef sRef
    
    172 174
         remoteTHCall (qsPipe s) StartRecover
    
    173
    -    e <- try $ unmask $ runGHCiQ (a <* ghcCmd FailIfErrs) s
    
    175
    +    e <- try $ unmask $ runGHCiQ (a <* ghcCmd FailIfErrs) sRef
    
    174 176
         remoteTHCall (qsPipe s) (EndRecover (isLeft e))
    
    175 177
         case e of
    
    176
    -      Left GHCiQException{} -> h s
    
    178
    +      Left GHCiQException{} -> h sRef
    
    177 179
           Right r -> return r
    
    178 180
       qLookupName isType occ = ghcCmd (LookupName isType occ)
    
    179 181
       qReify name = ghcCmd (Reify name)
    
    ... ... @@ -200,15 +202,16 @@ instance TH.Quasi GHCiQ where
    200 202
       qAddTempFile suffix = ghcCmd (AddTempFile suffix)
    
    201 203
       qAddTopDecls decls = ghcCmd (AddTopDecls decls)
    
    202 204
       qAddForeignFilePath lang fp = ghcCmd (AddForeignFilePath lang fp)
    
    203
    -  qAddModFinalizer fin = GHCiQ (\s -> mkRemoteRef fin >>= return . (, s)) >>=
    
    205
    +  qAddModFinalizer fin = GHCiQ (\_ -> mkRemoteRef fin) >>=
    
    204 206
                              ghcCmd . AddModFinalizer
    
    205 207
       qAddCorePlugin str = ghcCmd (AddCorePlugin str)
    
    206
    -  qGetQ = GHCiQ $ \s ->
    
    208
    +  qGetQ = do
    
    209
    +    s <- getState
    
    207 210
         let lookup :: forall a. Typeable a => Map TypeRep Dynamic -> Maybe a
    
    208 211
             lookup m = fromDynamic =<< M.lookup (typeOf (undefined::a)) m
    
    209
    -    in return (lookup (qsMap s), s)
    
    210
    -  qPutQ k = GHCiQ $ \s ->
    
    211
    -    return ((), s { qsMap = M.insert (typeOf k) (toDyn k) (qsMap s) })
    
    212
    +    return $ lookup (qsMap s)
    
    213
    +  qPutQ k = GHCiQ $ \sRef ->
    
    214
    +    modifyIORef' sRef (\s -> s { qsMap = M.insert (typeOf k) (toDyn k) (qsMap s) })
    
    212 215
       qIsExtEnabled x = ghcCmd (IsExtEnabled x)
    
    213 216
       qExtsEnabled = ghcCmd ExtsEnabled
    
    214 217
       qPutDoc l s = ghcCmd (PutDoc l s)
    
    ... ... @@ -231,7 +234,8 @@ runModFinalizerRefs pipe rstate qrefs = do
    231 234
       qs <- mapM localRef qrefs
    
    232 235
       qstateref <- localRef rstate
    
    233 236
       qstate <- readIORef qstateref
    
    234
    -  _ <- runGHCiQ (TH.runQ $ sequence_ qs) qstate { qsPipe = pipe }
    
    237
    +  qstate' <- newIORef $ qstate { qsPipe = pipe }
    
    238
    +  _ <- runGHCiQ (TH.runQ $ sequence_ qs) qstate'
    
    235 239
       return ()
    
    236 240
     
    
    237 241
     -- | The implementation of the 'RunTH' message
    
    ... ... @@ -267,8 +271,6 @@ runTHQ
    267 271
       -> IO ByteString
    
    268 272
     runTHQ pipe rstate mb_loc ghciq = do
    
    269 273
       qstateref <- localRef rstate
    
    270
    -  qstate <- readIORef qstateref
    
    271
    -  let st = qstate { qsLocation = mb_loc, qsPipe = pipe }
    
    272
    -  (r,new_state) <- runGHCiQ (TH.runQ ghciq) st
    
    273
    -  writeIORef qstateref new_state
    
    274
    +  modifyIORef' qstateref (\qstate -> qstate { qsLocation = mb_loc, qsPipe = pipe })
    
    275
    +  r <- runGHCiQ (TH.runQ ghciq) qstateref
    
    274 276
       return $! LB.toStrict (runPut (put r))

  • rts/IOManager.h
    ... ... @@ -21,6 +21,15 @@
    21 21
     
    
    22 22
     #include "sm/GC.h" // for evac_fn
    
    23 23
     
    
    24
    +#if defined(mingw32_HOST_OS)
    
    25
    +/* Global var (only on Windows) that is exported (hence before BeginPrivate.h)
    
    26
    + * to be shared with the I/O code in the base library to tell us which style
    
    27
    + * of I/O manager we are using: one that uses the Windows native API HANDLEs,
    
    28
    + * or one that uses Posix style fds.
    
    29
    + */
    
    30
    +extern bool rts_IOManagerIsWin32Native;
    
    31
    +#endif
    
    32
    +
    
    24 33
     #include "BeginPrivate.h"
    
    25 34
     
    
    26 35
     /* The ./configure gives us a set of CPP flags, one for each named I/O manager:
    
    ... ... @@ -160,14 +169,6 @@ typedef enum {
    160 169
     /* Global var to tell us which I/O manager impl we are using */
    
    161 170
     extern IOManagerType iomgr_type;
    
    162 171
     
    
    163
    -#if defined(mingw32_HOST_OS)
    
    164
    -/* Global var (only on Windows) that is exported to be shared with the I/O code
    
    165
    - * in the base library to tell us which style of I/O manager we are using: one
    
    166
    - * that uses the Windows native API HANDLEs, or one that uses Posix style fds.
    
    167
    - */
    
    168
    -extern bool rts_IOManagerIsWin32Native;
    
    169
    -#endif
    
    170
    -
    
    171 172
     
    
    172 173
     /* The CapIOManager is the per-capability data structure belonging to the I/O
    
    173 174
      * manager. It is defined in full in IOManagerInternals.h. The opaque forward
    

  • rts/Linker.c
    ... ... @@ -478,16 +478,7 @@ initLinker_ (int retain_cafs)
    478 478
         symhash = allocStrHashTable();
    
    479 479
     
    
    480 480
         /* populate the symbol table with stuff from the RTS */
    
    481
    -    IF_DEBUG(linker, debugBelch("populating linker symbol table with built-in RTS symbols\n"));
    
    482
    -    for (const RtsSymbolVal *sym = rtsSyms; sym->lbl != NULL; sym++) {
    
    483
    -        IF_DEBUG(linker, debugBelch("initLinker: inserting rts symbol %s, %p\n", sym->lbl, sym->addr));
    
    484
    -        if (! ghciInsertSymbolTable(WSTR("(GHCi built-in symbols)"),
    
    485
    -                                    symhash, sym->lbl, sym->addr,
    
    486
    -                                    sym->strength, sym->type, 0, NULL)) {
    
    487
    -            barf("ghciInsertSymbolTable failed");
    
    488
    -        }
    
    489
    -    }
    
    490
    -    IF_DEBUG(linker, debugBelch("done with built-in RTS symbols\n"));
    
    481
    +    initLinkerRtsSyms(symhash);
    
    491 482
     
    
    492 483
         /* Add extra symbols. rtsExtraSyms() is a weakly defined symbol in the rts,
    
    493 484
          * that can be overrided by linking in an object with a corresponding
    

  • rts/LinkerInternals.h
    ... ... @@ -502,4 +502,6 @@ ObjectCode* mkOc( ObjectType type, pathchar *path, char *image, int imageSize,
    502 502
     void initSegment(Segment *s, void *start, size_t size, SegmentProt prot, int n_sections);
    
    503 503
     void freeSegments(ObjectCode *oc);
    
    504 504
     
    
    505
    +void initLinkerRtsSyms(StrHashTable *symhash);
    
    506
    +
    
    505 507
     #include "EndPrivate.h"

  • rts/RtsSymbols.c
    ... ... @@ -9,6 +9,8 @@
    9 9
     #include "ghcplatform.h"
    
    10 10
     #include "Rts.h"
    
    11 11
     #include "RtsSymbols.h"
    
    12
    +#include "LinkerInternals.h"
    
    13
    +#include "PathUtils.h"
    
    12 14
     
    
    13 15
     #include "TopHandler.h"
    
    14 16
     #include "HsFFI.h"
    
    ... ... @@ -51,6 +53,20 @@ extern char **environ;
    51 53
     
    
    52 54
     /* -----------------------------------------------------------------------------
    
    53 55
      * Symbols to be inserted into the RTS symbol table.
    
    56
    + *
    
    57
    + * Note [Naming Scheme for Symbol Macros]
    
    58
    + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    59
    + *
    
    60
    + * SymI_*: symbol is internal to the RTS. It resides in an object
    
    61
    + *         file/library that is linked into the RTS library (as a static
    
    62
    + *         archive or dynamic shared library).
    
    63
    + * SymE_*: symbol is external to the RTS library. It might be linked
    
    64
    + *         dynamically.
    
    65
    + *
    
    66
    + * Sym*_HasProto  : the symbol prototype is imported in an include file
    
    67
    + *                  or defined explicitly
    
    68
    + * Sym*_NeedsProto: the symbol is undefined and we add a dummy
    
    69
    + *                  default proto extern void sym(void);
    
    54 70
      */
    
    55 71
     
    
    56 72
     #define Maybe_Stable_Names      SymI_HasProto(stg_mkWeakzh)                   \
    
    ... ... @@ -162,7 +178,7 @@ extern char **environ;
    162 178
           SymI_HasProto(stg_asyncWritezh)                    \
    
    163 179
           SymI_HasProto(stg_asyncDoProczh)                   \
    
    164 180
           SymI_HasProto(rts_InstallConsoleEvent)             \
    
    165
    -      SymI_HasProto(rts_IOManagerIsWin32Native)          \
    
    181
    +      SymI_HasDataProto(rts_IOManagerIsWin32Native)          \
    
    166 182
           SymI_HasProto(rts_ConsoleHandlerDone)              \
    
    167 183
           SymI_NeedsProto(__mingw_module_is_dll)             \
    
    168 184
           RTS_WIN64_ONLY(SymI_NeedsProto(___chkstk_ms))      \
    
    ... ... @@ -524,7 +540,12 @@ extern char **environ;
    524 540
           SymI_HasProto(__word_encodeFloat)                                 \
    
    525 541
           SymI_HasDataProto(stg_atomicallyzh)                                   \
    
    526 542
           SymI_HasProto(barf)                                               \
    
    543
    +      SymI_HasProto(startEventLogging)                                  \
    
    544
    +      SymI_HasProto(endEventLogging)                                    \
    
    527 545
           SymI_HasProto(flushEventLog)                                      \
    
    546
    +      SymI_HasProto(flushEventLog)                                      \
    
    547
    +      SymI_HasProto(getTraceFlag)                                       \
    
    548
    +      SymI_HasProto(setTraceFlag)                                       \
    
    528 549
           SymI_HasProto(deRefStablePtr)                                     \
    
    529 550
           SymI_HasProto(debugBelch)                                         \
    
    530 551
           SymI_HasProto(errorBelch)                                         \
    
    ... ... @@ -914,7 +935,7 @@ extern char **environ;
    914 935
           SymI_HasProto(freeExecPage)                                       \
    
    915 936
           SymI_HasProto(getAllocations)                                     \
    
    916 937
           SymI_HasProto(revertCAFs)                                         \
    
    917
    -      SymI_HasProto(RtsFlags)                                           \
    
    938
    +      SymI_HasDataProto(RtsFlags)                                           \
    
    918 939
           SymI_NeedsDataProto(rts_breakpoint_io_action)                     \
    
    919 940
           SymI_NeedsDataProto(rts_stop_next_breakpoint)                     \
    
    920 941
           SymI_NeedsDataProto(rts_stop_on_exception)                        \
    
    ... ... @@ -925,9 +946,9 @@ extern char **environ;
    925 946
           SymI_NeedsProto(rts_enableStopAfterReturn)                        \
    
    926 947
           SymI_NeedsProto(rts_disableStopAfterReturn)                       \
    
    927 948
           SymI_HasProto(stopTimer)                                          \
    
    928
    -      SymI_HasProto(n_capabilities)                                     \
    
    929
    -      SymI_HasProto(max_n_capabilities)                                 \
    
    930
    -      SymI_HasProto(enabled_capabilities)                               \
    
    949
    +      SymI_HasDataProto(n_capabilities)                                     \
    
    950
    +      SymI_HasDataProto(max_n_capabilities)                                 \
    
    951
    +      SymI_HasDataProto(enabled_capabilities)                               \
    
    931 952
           SymI_HasDataProto(stg_traceEventzh)                                   \
    
    932 953
           SymI_HasDataProto(stg_traceMarkerzh)                                  \
    
    933 954
           SymI_HasDataProto(stg_traceBinaryEventzh)                             \
    
    ... ... @@ -1145,12 +1166,27 @@ extern char **environ;
    1145 1166
           SymI_HasProto(hs_word2float64)
    
    1146 1167
     
    
    1147 1168
     
    
    1148
    -/* entirely bogus claims about types of these symbols */
    
    1149
    -#define SymI_NeedsProto(vvv)  extern void vvv(void);
    
    1150
    -#define SymI_NeedsDataProto(vvv)  extern StgWord vvv[];
    
    1151
    -#define SymE_NeedsProto(vvv)  SymI_NeedsProto(vvv);
    
    1152
    -#define SymE_NeedsDataProto(vvv)  SymI_NeedsDataProto(vvv);
    
    1153
    -#define SymE_HasProto(vvv)    SymI_HasProto(vvv);
    
    1169
    +/* Declare prototypes for the symbols that need it, so we can refer
    
    1170
    + * to them in the rtsSyms table below.
    
    1171
    + *
    
    1172
    + * In particular, for the external ones (SymE_*) we use the dllimport attribute
    
    1173
    + * to indicate that (on Windows) they come from external DLLs. This attribute
    
    1174
    + * is ignored on other platforms.
    
    1175
    + *
    
    1176
    + * The claims about the types of these symbols are entirely bogus.
    
    1177
    + */
    
    1178
    +#if defined(mingw32_HOST_OS) && defined(DYNAMIC)
    
    1179
    +#define DLLIMPORT __attribute__((dllimport))
    
    1180
    +#else
    
    1181
    +#define DLLIMPORT /**/
    
    1182
    +#endif
    
    1183
    +
    
    1184
    +#define SymI_NeedsProto(vvv)      extern           void vvv(void);
    
    1185
    +#define SymI_NeedsDataProto(vvv)  extern           StgWord vvv[];
    
    1186
    +#define SymE_NeedsProto(vvv)      extern DLLIMPORT void vvv(void);
    
    1187
    +#define SymE_NeedsDataProto(vvv)  extern DLLIMPORT StgWord vvv[];
    
    1188
    +
    
    1189
    +#define SymE_HasProto(vvv) /**/
    
    1154 1190
     #define SymI_HasProto(vvv) /**/
    
    1155 1191
     #define SymI_HasDataProto(vvv) /**/
    
    1156 1192
     #define SymI_HasProto_redirect(vvv,xxx,strength,ty) /**/
    
    ... ... @@ -1179,6 +1215,8 @@ RTS_SYMBOLS_PRIM
    1179 1215
     #undef SymE_NeedsProto
    
    1180 1216
     #undef SymE_NeedsDataProto
    
    1181 1217
     
    
    1218
    +/* See Note [Naming Scheme for Symbol Macros] */
    
    1219
    +
    
    1182 1220
     #define SymI_HasProto(vvv) { MAYBE_LEADING_UNDERSCORE_STR(#vvv), \
    
    1183 1221
                         (void*)(&(vvv)), STRENGTH_NORMAL, SYM_TYPE_CODE },
    
    1184 1222
     #define SymI_HasDataProto(vvv) { MAYBE_LEADING_UNDERSCORE_STR(#vvv), \
    
    ... ... @@ -1199,7 +1237,16 @@ RTS_SYMBOLS_PRIM
    1199 1237
         { MAYBE_LEADING_UNDERSCORE_STR(#vvv),    \
    
    1200 1238
           (void*)(&(xxx)), strength, ty },
    
    1201 1239
     
    
    1202
    -RtsSymbolVal rtsSyms[] = {
    
    1240
    +
    
    1241
    +
    
    1242
    +/* Initialize (if not already initialized) and return an array of symbols with stuff from the RTS. */
    
    1243
    +void initLinkerRtsSyms (StrHashTable *symhash) {
    
    1244
    +    /* The address of data symbols with the dllimport attribute are not
    
    1245
    +     * compile-time constants and so cannot be used in constant initialisers.
    
    1246
    +     * For this reason, rtsSyms is a local variable within this function
    
    1247
    +     * rather than a global constant (as it was historically).
    
    1248
    +     */
    
    1249
    +    const RtsSymbolVal rtsSyms[] = {
    
    1203 1250
           RTS_SYMBOLS
    
    1204 1251
           RTS_RET_SYMBOLS
    
    1205 1252
           RTS_POSIX_ONLY_SYMBOLS
    
    ... ... @@ -1214,7 +1261,20 @@ RtsSymbolVal rtsSyms[] = {
    1214 1261
           RTS_SYMBOLS_PRIM
    
    1215 1262
           SymI_HasDataProto(nonmoving_write_barrier_enabled)
    
    1216 1263
           { 0, 0, STRENGTH_NORMAL, SYM_TYPE_CODE } /* sentinel */
    
    1217
    -};
    
    1264
    +    };
    
    1265
    +
    
    1266
    +    IF_DEBUG(linker, debugBelch("populating linker symbol table with built-in RTS symbols\n"));
    
    1267
    +    for (const RtsSymbolVal *sym = rtsSyms; sym->lbl != NULL; sym++) {
    
    1268
    +        IF_DEBUG(linker, debugBelch("initLinker: inserting rts symbol %s, %p\n", sym->lbl, sym->addr));
    
    1269
    +        if (! ghciInsertSymbolTable(WSTR("(GHCi built-in symbols)"),
    
    1270
    +                                    symhash, sym->lbl, sym->addr,
    
    1271
    +                                    sym->strength, sym->type, 0, NULL)) {
    
    1272
    +            barf("ghciInsertSymbolTable failed");
    
    1273
    +        }
    
    1274
    +    }
    
    1275
    +    IF_DEBUG(linker, debugBelch("done with built-in RTS symbols\n"));
    
    1276
    +}
    
    1277
    +
    
    1218 1278
     
    
    1219 1279
     
    
    1220 1280
     // Note [Extra RTS symbols]
    

  • rts/RtsSymbols.h
    ... ... @@ -46,8 +46,6 @@ typedef struct _RtsSymbolVal {
    46 46
         SymType type;
    
    47 47
     } RtsSymbolVal;
    
    48 48
     
    
    49
    -extern RtsSymbolVal rtsSyms[];
    
    50
    -
    
    51 49
     extern RtsSymbolVal* __attribute__((weak)) rtsExtraSyms(void);
    
    52 50
     
    
    53 51
     /* See Note [_iob_func symbol].  */
    

  • rts/Trace.c
    ... ... @@ -29,14 +29,54 @@
    29 29
     #include <unistd.h>
    
    30 30
     #endif
    
    31 31
     
    
    32
    -// events
    
    33
    -uint8_t TRACE_sched;
    
    34
    -uint8_t TRACE_gc;
    
    35
    -uint8_t TRACE_nonmoving_gc;
    
    36
    -uint8_t TRACE_spark_sampled;
    
    37
    -uint8_t TRACE_spark_full;
    
    38
    -uint8_t TRACE_user;
    
    39
    -uint8_t TRACE_cap;
    
    32
    +RUNTIME_TRACE_FLAG_CACHE RuntimeTraceFlagCache = {0};
    
    33
    +
    
    34
    +bool getTraceFlag(RUNTIME_TRACE_FLAG flag) {
    
    35
    +  switch (flag) {
    
    36
    +  case TRACE_SCHEDULER:
    
    37
    +    return RuntimeTraceFlagCache.scheduler;
    
    38
    +  case TRACE_GC:
    
    39
    +    return RuntimeTraceFlagCache.gc;
    
    40
    +  case TRACE_NONMOVING_GC:
    
    41
    +    return RuntimeTraceFlagCache.nonmoving_gc;
    
    42
    +  case TRACE_SPARK_SAMPLED:
    
    43
    +    return RuntimeTraceFlagCache.spark_sampled;
    
    44
    +  case TRACE_SPARK_FULL:
    
    45
    +    return RuntimeTraceFlagCache.spark_full;
    
    46
    +  case TRACE_USER:
    
    47
    +    return RuntimeTraceFlagCache.user;
    
    48
    +  case TRACE_CAP:
    
    49
    +    return RuntimeTraceFlagCache.cap;
    
    50
    +  default:
    
    51
    +    return false;
    
    52
    +  }
    
    53
    +}
    
    54
    +
    
    55
    +void setTraceFlag(RUNTIME_TRACE_FLAG flag, bool value) {
    
    56
    +  switch (flag) {
    
    57
    +  case TRACE_SCHEDULER:
    
    58
    +    RuntimeTraceFlagCache.scheduler = value;
    
    59
    +    break;
    
    60
    +  case TRACE_GC:
    
    61
    +    RuntimeTraceFlagCache.gc = value;
    
    62
    +    break;
    
    63
    +  case TRACE_NONMOVING_GC:
    
    64
    +    RuntimeTraceFlagCache.nonmoving_gc = value;
    
    65
    +    break;
    
    66
    +  case TRACE_SPARK_SAMPLED:
    
    67
    +    RuntimeTraceFlagCache.spark_sampled = value;
    
    68
    +    break;
    
    69
    +  case TRACE_SPARK_FULL:
    
    70
    +    RuntimeTraceFlagCache.spark_full = value;
    
    71
    +    break;
    
    72
    +  case TRACE_USER:
    
    73
    +    RuntimeTraceFlagCache.user = value;
    
    74
    +    break;
    
    75
    +  case TRACE_CAP:
    
    76
    +    RuntimeTraceFlagCache.cap = value;
    
    77
    +    break;
    
    78
    +  }
    
    79
    +}
    
    40 80
     
    
    41 81
     #if defined(THREADED_RTS)
    
    42 82
     static Mutex trace_utx;
    
    ... ... @@ -51,43 +91,41 @@ static void traceCap_stderr(Capability *cap, char *msg, ...);
    51 91
      --------------------------------------------------------------------------- */
    
    52 92
     
    
    53 93
     /*
    
    54
    - * Update the TRACE_* globals. Must be called whenever RtsFlags.TraceFlags is
    
    55
    - * modified.
    
    94
    + * Initialise the runtime trace flags from RtsFlags.TraceFlags.
    
    56 95
      */
    
    57
    -static void updateTraceFlagCache (void)
    
    58
    -{
    
    59
    -    // -Ds turns on scheduler tracing too
    
    60
    -    TRACE_sched =
    
    61
    -        RtsFlags.TraceFlags.scheduler ||
    
    62
    -        RtsFlags.DebugFlags.scheduler;
    
    63
    -
    
    64
    -    // -Dg turns on gc tracing too
    
    65
    -    TRACE_gc =
    
    66
    -        RtsFlags.TraceFlags.gc ||
    
    67
    -        RtsFlags.DebugFlags.gc ||
    
    68
    -        RtsFlags.DebugFlags.scheduler;
    
    69
    -
    
    70
    -    TRACE_nonmoving_gc =
    
    71
    -        RtsFlags.TraceFlags.nonmoving_gc;
    
    72
    -
    
    73
    -    TRACE_spark_sampled =
    
    74
    -        RtsFlags.TraceFlags.sparks_sampled;
    
    75
    -
    
    76
    -    // -Dr turns on full spark tracing
    
    77
    -    TRACE_spark_full =
    
    78
    -        RtsFlags.TraceFlags.sparks_full ||
    
    79
    -        RtsFlags.DebugFlags.sparks;
    
    80
    -
    
    81
    -    TRACE_user =
    
    82
    -        RtsFlags.TraceFlags.user;
    
    83
    -
    
    84
    -    // We trace cap events if we're tracing anything else
    
    85
    -    TRACE_cap =
    
    86
    -        TRACE_sched ||
    
    87
    -        TRACE_gc ||
    
    88
    -        TRACE_spark_sampled ||
    
    89
    -        TRACE_spark_full ||
    
    90
    -        TRACE_user;
    
    96
    +static void updateTraceFlagCache(void) {
    
    97
    +  // -Ds turns on scheduler tracing too
    
    98
    +  RuntimeTraceFlagCache.scheduler =
    
    99
    +    RtsFlags.TraceFlags.scheduler ||
    
    100
    +    RtsFlags.DebugFlags.scheduler;
    
    101
    +
    
    102
    +  // -Dg turns on gc tracing too
    
    103
    +  RuntimeTraceFlagCache.gc =
    
    104
    +    RtsFlags.TraceFlags.gc ||
    
    105
    +    RtsFlags.DebugFlags.gc ||
    
    106
    +    RtsFlags.DebugFlags.scheduler;
    
    107
    +
    
    108
    +  RuntimeTraceFlagCache.nonmoving_gc =
    
    109
    +    RtsFlags.TraceFlags.nonmoving_gc;
    
    110
    +
    
    111
    +  RuntimeTraceFlagCache.spark_sampled =
    
    112
    +    RtsFlags.TraceFlags.sparks_sampled;
    
    113
    +
    
    114
    +  // -Dr turns on full spark tracing
    
    115
    +  RuntimeTraceFlagCache.spark_full =
    
    116
    +      RtsFlags.TraceFlags.sparks_full ||
    
    117
    +      RtsFlags.DebugFlags.sparks;
    
    118
    +
    
    119
    +  RuntimeTraceFlagCache.user =
    
    120
    +    RtsFlags.TraceFlags.user;
    
    121
    +
    
    122
    +  // We trace cap events if we're tracing anything else
    
    123
    +  RuntimeTraceFlagCache.cap =
    
    124
    +    TRACE_sched ||
    
    125
    +    TRACE_gc ||
    
    126
    +    TRACE_spark_sampled ||
    
    127
    +    TRACE_spark_full ||
    
    128
    +    TRACE_user;
    
    91 129
     }
    
    92 130
     
    
    93 131
     void initTracing (void)
    
    ... ... @@ -880,59 +918,65 @@ void traceThreadLabel_(Capability *cap,
    880 918
         }
    
    881 919
     }
    
    882 920
     
    
    883
    -void traceConcMarkBegin(void)
    
    921
    +void traceNonmovingGcEvent_ (EventTypeNum tag)
    
    884 922
     {
    
    885
    -    if (eventlog_enabled)
    
    886
    -        postEventNoCap(EVENT_CONC_MARK_BEGIN);
    
    923
    +#if defined(DEBUG)
    
    924
    +    if (RtsFlags.TraceFlags.tracing == TRACE_STDERR) {
    
    925
    +        /* nothing - no string representation for nonmoving GC events  */
    
    926
    +    } else
    
    927
    +#endif
    
    928
    +    {
    
    929
    +        /* currently most non-moving GC events are nullary events */
    
    930
    +        postEventNoCap(tag);
    
    931
    +    }
    
    887 932
     }
    
    888 933
     
    
    889
    -void traceConcMarkEnd(StgWord32 marked_obj_count)
    
    934
    +void traceConcMarkEnd_(StgWord32 marked_obj_count)
    
    890 935
     {
    
    891
    -    if (eventlog_enabled)
    
    936
    +#if defined(DEBUG)
    
    937
    +    if (RtsFlags.TraceFlags.tracing == TRACE_STDERR) {
    
    938
    +        /* nothing - no string representation for nonmoving GC events  */
    
    939
    +    } else
    
    940
    +#endif
    
    941
    +    {
    
    892 942
             postConcMarkEnd(marked_obj_count);
    
    943
    +    }
    
    893 944
     }
    
    894 945
     
    
    895
    -void traceConcSyncBegin(void)
    
    896
    -{
    
    897
    -    if (eventlog_enabled)
    
    898
    -        postEventNoCap(EVENT_CONC_SYNC_BEGIN);
    
    899
    -}
    
    900
    -
    
    901
    -void traceConcSyncEnd(void)
    
    902
    -{
    
    903
    -    if (eventlog_enabled)
    
    904
    -        postEventNoCap(EVENT_CONC_SYNC_END);
    
    905
    -}
    
    906
    -
    
    907
    -void traceConcSweepBegin(void)
    
    908
    -{
    
    909
    -    if (eventlog_enabled)
    
    910
    -        postEventNoCap(EVENT_CONC_SWEEP_BEGIN);
    
    911
    -}
    
    912
    -
    
    913
    -void traceConcSweepEnd(void)
    
    914
    -{
    
    915
    -    if (eventlog_enabled)
    
    916
    -        postEventNoCap(EVENT_CONC_SWEEP_END);
    
    917
    -}
    
    918
    -
    
    919
    -void traceConcUpdRemSetFlush(Capability *cap)
    
    946
    +void traceConcUpdRemSetFlush_(Capability *cap)
    
    920 947
     {
    
    921
    -    if (eventlog_enabled)
    
    948
    +#if defined(DEBUG)
    
    949
    +    if (RtsFlags.TraceFlags.tracing == TRACE_STDERR) {
    
    950
    +        /* nothing - no string representation for nonmoving GC events  */
    
    951
    +    } else
    
    952
    +#endif
    
    953
    +    {
    
    922 954
             postConcUpdRemSetFlush(cap);
    
    955
    +    }
    
    923 956
     }
    
    924 957
     
    
    925
    -void traceNonmovingHeapCensus(uint16_t blk_size,
    
    926
    -                              const struct NonmovingAllocCensus *census)
    
    958
    +void traceNonmovingHeapCensus_(uint16_t blk_size, const struct NonmovingAllocCensus *census)
    
    927 959
     {
    
    928
    -    if (eventlog_enabled && TRACE_nonmoving_gc)
    
    960
    +#if defined(DEBUG)
    
    961
    +    if (RtsFlags.TraceFlags.tracing == TRACE_STDERR) {
    
    962
    +        /* nothing - no string representation for nonmoving GC events  */
    
    963
    +    } else
    
    964
    +#endif
    
    965
    +    {
    
    929 966
             postNonmovingHeapCensus(blk_size, census);
    
    967
    +    }
    
    930 968
     }
    
    931 969
     
    
    932
    -void traceNonmovingPrunedSegments(uint32_t pruned_segments, uint32_t free_segments)
    
    970
    +void traceNonmovingPrunedSegments_(uint32_t pruned_segments, uint32_t free_segments)
    
    933 971
     {
    
    934
    -    if (eventlog_enabled && TRACE_nonmoving_gc)
    
    972
    +#if defined(DEBUG)
    
    973
    +    if (RtsFlags.TraceFlags.tracing == TRACE_STDERR) {
    
    974
    +        /* nothing - no string representation for nonmoving GC events  */
    
    975
    +    } else
    
    976
    +#endif
    
    977
    +    {
    
    935 978
             postNonmovingPrunedSegments(pruned_segments, free_segments);
    
    979
    +    }
    
    936 980
     }
    
    937 981
     
    
    938 982
     void traceThreadStatus_ (StgTSO *tso USED_IF_DEBUG)
    

  • rts/Trace.h
    ... ... @@ -70,16 +70,35 @@ enum CapsetType { CapsetTypeCustom = CAPSET_TYPE_CUSTOM,
    70 70
     #define DEBUG_continuation RtsFlags.DebugFlags.continuation
    
    71 71
     #define DEBUG_iomanager   RtsFlags.DebugFlags.iomanager
    
    72 72
     
    
    73
    -// Event-enabled flags
    
    74
    -// These semantically booleans but we use a dense packing to minimize their
    
    75
    -// cache impact.
    
    76
    -extern uint8_t TRACE_sched;
    
    77
    -extern uint8_t TRACE_gc;
    
    78
    -extern uint8_t TRACE_nonmoving_gc;
    
    79
    -extern uint8_t TRACE_spark_sampled;
    
    80
    -extern uint8_t TRACE_spark_full;
    
    81
    -extern uint8_t TRACE_cap;
    
    82
    -/* extern uint8_t TRACE_user; */  // only used in Trace.c
    
    73
    +// These trace flags are shorthand for the members of the RuntimeTraceFlagCache
    
    74
    +// struct. Within the RTS, these should be treated as read-only variables.
    
    75
    +#define TRACE_sched         ((const bool)RuntimeTraceFlagCache.scheduler)
    
    76
    +#define TRACE_gc            ((const bool)RuntimeTraceFlagCache.gc)
    
    77
    +#define TRACE_nonmoving_gc  ((const bool)RuntimeTraceFlagCache.nonmoving_gc)
    
    78
    +#define TRACE_spark_sampled ((const bool)RuntimeTraceFlagCache.spark_sampled)
    
    79
    +#define TRACE_spark_full    ((const bool)RuntimeTraceFlagCache.spark_full)
    
    80
    +#define TRACE_user          ((const bool)RuntimeTraceFlagCache.user)
    
    81
    +#define TRACE_cap           ((const bool)RuntimeTraceFlagCache.cap)
    
    82
    +
    
    83
    +/*
    
    84
    + * Runtime trace flags.
    
    85
    + */
    
    86
    +typedef struct {
    
    87
    +  bool scheduler;
    
    88
    +  bool gc;
    
    89
    +  bool nonmoving_gc;
    
    90
    +  bool spark_sampled;
    
    91
    +  bool spark_full;
    
    92
    +  bool user;
    
    93
    +  bool cap;
    
    94
    +} RUNTIME_TRACE_FLAG_CACHE;
    
    95
    +
    
    96
    +/*
    
    97
    + * These flags should be used to determine whether or not some value should
    
    98
    + * be traced at runtime, rather than the values in RtsFlags. These flags can
    
    99
    + * be modified at runtime using setTraceFlag in `rts/EventLogWriter.h`.
    
    100
    + */
    
    101
    +extern RUNTIME_TRACE_FLAG_CACHE RuntimeTraceFlagCache;
    
    83 102
     
    
    84 103
     // -----------------------------------------------------------------------------
    
    85 104
     // Posting events
    
    ... ... @@ -136,6 +155,52 @@ void traceGcEvent_ (Capability *cap, EventTypeNum tag);
    136 155
     
    
    137 156
     void traceGcEventAtT_ (Capability *cap, StgWord64 ts, EventTypeNum tag);
    
    138 157
     
    
    158
    +/*
    
    159
    + * Record a nonmoving GC event.
    
    160
    + */
    
    161
    +#define traceConcMarkBegin()                                           \
    
    162
    +    if (RTS_UNLIKELY(TRACE_nonmoving_gc)) {                            \
    
    163
    +        traceNonmovingGcEvent_(EVENT_CONC_MARK_BEGIN);                 \
    
    164
    +    }
    
    165
    +#define traceConcMarkEnd(marked_obj_count)                             \
    
    166
    +    if (RTS_UNLIKELY(TRACE_nonmoving_gc)) {                            \
    
    167
    +        traceConcMarkEnd_(marked_obj_count);                           \
    
    168
    +    }
    
    169
    +#define traceConcSyncBegin()                                           \
    
    170
    +    if (RTS_UNLIKELY(TRACE_nonmoving_gc)) {                            \
    
    171
    +        traceNonmovingGcEvent_(EVENT_CONC_SYNC_BEGIN);                 \
    
    172
    +    }
    
    173
    +#define traceConcSyncEnd()                                             \
    
    174
    +    if (RTS_UNLIKELY(TRACE_nonmoving_gc)) {                            \
    
    175
    +        traceNonmovingGcEvent_(EVENT_CONC_SYNC_END);                   \
    
    176
    +    }
    
    177
    +#define traceConcSweepBegin()                                          \
    
    178
    +    if (RTS_UNLIKELY(TRACE_nonmoving_gc)) {                            \
    
    179
    +        traceNonmovingGcEvent_(EVENT_CONC_SWEEP_BEGIN);                \
    
    180
    +    }
    
    181
    +#define traceConcSweepEnd()                                            \
    
    182
    +    if (RTS_UNLIKELY(TRACE_nonmoving_gc)) {                            \
    
    183
    +        traceNonmovingGcEvent_(EVENT_CONC_SWEEP_END);                  \
    
    184
    +    }
    
    185
    +#define traceConcUpdRemSetFlush(cap)                                   \
    
    186
    +    if (RTS_UNLIKELY(TRACE_nonmoving_gc)) {                            \
    
    187
    +        traceConcUpdRemSetFlush_(cap);                                 \
    
    188
    +    }
    
    189
    +#define traceNonmovingHeapCensus(blk_size, census)                     \
    
    190
    +    if (RTS_UNLIKELY(TRACE_nonmoving_gc)) {                            \
    
    191
    +        traceNonmovingHeapCensus_(blk_size, census);                   \
    
    192
    +    }
    
    193
    +#define traceNonmovingPrunedSegments(pruned_segments, free_segments)   \
    
    194
    +    if (RTS_UNLIKELY(TRACE_nonmoving_gc)) {                            \
    
    195
    +        traceNonmovingPrunedSegments_(pruned_segments, free_segments); \
    
    196
    +    }
    
    197
    +
    
    198
    +void traceNonmovingGcEvent_ (EventTypeNum tag);
    
    199
    +void traceConcMarkEnd_(StgWord32 marked_obj_count);
    
    200
    +void traceConcUpdRemSetFlush_(Capability *cap);
    
    201
    +void traceNonmovingHeapCensus_(uint16_t blk_size, const struct NonmovingAllocCensus *census);
    
    202
    +void traceNonmovingPrunedSegments_(uint32_t pruned_segments, uint32_t free_segments);
    
    203
    +
    
    139 204
     /*
    
    140 205
      * Record a heap event
    
    141 206
      */
    
    ... ... @@ -321,17 +386,6 @@ void traceProfSampleCostCentre(Capability *cap,
    321 386
     void traceProfBegin(void);
    
    322 387
     #endif /* PROFILING */
    
    323 388
     
    
    324
    -void traceConcMarkBegin(void);
    
    325
    -void traceConcMarkEnd(StgWord32 marked_obj_count);
    
    326
    -void traceConcSyncBegin(void);
    
    327
    -void traceConcSyncEnd(void);
    
    328
    -void traceConcSweepBegin(void);
    
    329
    -void traceConcSweepEnd(void);
    
    330
    -void traceConcUpdRemSetFlush(Capability *cap);
    
    331
    -void traceNonmovingHeapCensus(uint16_t blk_size,
    
    332
    -                              const struct NonmovingAllocCensus *census);
    
    333
    -void traceNonmovingPrunedSegments(uint32_t pruned_segments, uint32_t free_segments);
    
    334
    -
    
    335 389
     void traceIPE(const InfoProvEnt *ipe);
    
    336 390
     void flushTrace(void);
    
    337 391
     
    
    ... ... @@ -384,6 +438,7 @@ void flushTrace(void);
    384 438
     #define traceConcSweepEnd() /* nothing */
    
    385 439
     #define traceConcUpdRemSetFlush(cap) /* nothing */
    
    386 440
     #define traceNonmovingHeapCensus(blk_size, census) /* nothing */
    
    441
    +#define traceNonmovingPrunedSegments(pruned_segments, free_segments) /* nothing */
    
    387 442
     
    
    388 443
     #define flushTrace() /* nothing */
    
    389 444
     
    

  • rts/include/rts/EventLogWriter.h
    ... ... @@ -78,3 +78,34 @@ void endEventLogging(void);
    78 78
      * Flush the eventlog. cap can be NULL if one is not held.
    
    79 79
      */
    
    80 80
     void flushEventLog(Capability **cap);
    
    81
    +
    
    82
    +/*
    
    83
    + * An enumeration for the runtime trace flags.
    
    84
    + */
    
    85
    +typedef enum {
    
    86
    +  TRACE_SCHEDULER,
    
    87
    +  TRACE_GC,
    
    88
    +  TRACE_NONMOVING_GC,
    
    89
    +  TRACE_SPARK_SAMPLED,
    
    90
    +  TRACE_SPARK_FULL,
    
    91
    +  TRACE_USER,
    
    92
    +  TRACE_CAP,
    
    93
    +} RUNTIME_TRACE_FLAG;
    
    94
    +
    
    95
    +/*
    
    96
    + * Get the value of the given runtime trace flag.
    
    97
    + *
    
    98
    + * Warning: The trace flag cache is not thread-safe. After initialisation, the
    
    99
    + * RTS never writes to these values, but concurrently using getTraceFlag and
    
    100
    + * setTraceFlag for the same flag is a race condition.
    
    101
    + */
    
    102
    +bool getTraceFlag(RUNTIME_TRACE_FLAG flag);
    
    103
    +
    
    104
    +/*
    
    105
    + * Set the value of the given runtime trace flag.
    
    106
    + *
    
    107
    + * Warning: The trace flag cache is not thread-safe. After initialisation, the
    
    108
    + * RTS never writes to these values. However, inconsistent reads may lead to
    
    109
    + * incorrect tracing for a short time after setting a trace flag.
    
    110
    + */
    
    111
    +void setTraceFlag(RUNTIME_TRACE_FLAG flag, bool value);

  • rts/linker/Elf.c
    ... ... @@ -76,18 +76,6 @@
    76 76
      *
    
    77 77
      * See bug #781
    
    78 78
      * See thread http://www.haskell.org/pipermail/cvs-ghc/2007-September/038458.html
    
    79
    - *
    
    80
    - * Naming Scheme for Symbol Macros
    
    81
    - *
    
    82
    - * SymI_*: symbol is internal to the RTS. It resides in an object
    
    83
    - *         file/library that is statically.
    
    84
    - * SymE_*: symbol is external to the RTS library. It might be linked
    
    85
    - *         dynamically.
    
    86
    - *
    
    87
    - * Sym*_HasProto  : the symbol prototype is imported in an include file
    
    88
    - *                  or defined explicitly
    
    89
    - * Sym*_NeedsProto: the symbol is undefined and we add a dummy
    
    90
    - *                  default proto extern void sym(void);
    
    91 79
      */
    
    92 80
     #define X86_64_ELF_NONPIC_HACK (!RtsFlags.MiscFlags.linkerAlwaysPic)
    
    93 81
     
    

  • rts/sm/NonMoving.c
    ... ... @@ -1339,7 +1339,7 @@ concurrent_marking:
    1339 1339
             nonmovingPrintAllocatorCensus(!concurrent);
    
    1340 1340
     #endif
    
    1341 1341
     #if defined(TRACING)
    
    1342
    -    if (RtsFlags.TraceFlags.nonmoving_gc)
    
    1342
    +    if (RTS_UNLIKELY(TRACE_nonmoving_gc))
    
    1343 1343
             nonmovingTraceAllocatorCensus();
    
    1344 1344
     #endif
    
    1345 1345
     
    

  • testsuite/tests/interface-stability/base-exports.stdout
    ... ... @@ -1597,6 +1597,29 @@ module Data.Ratio where
    1597 1597
       denominator :: forall a. Ratio a -> a
    
    1598 1598
       numerator :: forall a. Ratio a -> a
    
    1599 1599
     
    
    1600
    +module Data.RealFloat where
    
    1601
    +  -- Safety: Safe
    
    1602
    +  pattern Infinity :: forall a. RealFloat a => a
    
    1603
    +  pattern NaN :: forall a. RealFloat a => a
    
    1604
    +  pattern NegInfinity :: forall a. RealFloat a => a
    
    1605
    +  type RealFloat :: * -> Constraint
    
    1606
    +  class (GHC.Internal.Real.RealFrac a, GHC.Internal.Float.Floating a) => RealFloat a where
    
    1607
    +    floatRadix :: a -> GHC.Internal.Bignum.Integer.Integer
    
    1608
    +    floatDigits :: a -> GHC.Internal.Types.Int
    
    1609
    +    floatRange :: a -> (GHC.Internal.Types.Int, GHC.Internal.Types.Int)
    
    1610
    +    decodeFloat :: a -> (GHC.Internal.Bignum.Integer.Integer, GHC.Internal.Types.Int)
    
    1611
    +    encodeFloat :: GHC.Internal.Bignum.Integer.Integer -> GHC.Internal.Types.Int -> a
    
    1612
    +    exponent :: a -> GHC.Internal.Types.Int
    
    1613
    +    significand :: a -> a
    
    1614
    +    scaleFloat :: GHC.Internal.Types.Int -> a -> a
    
    1615
    +    isNaN :: a -> GHC.Internal.Types.Bool
    
    1616
    +    isInfinite :: a -> GHC.Internal.Types.Bool
    
    1617
    +    isDenormalized :: a -> GHC.Internal.Types.Bool
    
    1618
    +    isNegativeZero :: a -> GHC.Internal.Types.Bool
    
    1619
    +    isIEEE :: a -> GHC.Internal.Types.Bool
    
    1620
    +    atan2 :: a -> a -> a
    
    1621
    +    {-# MINIMAL floatRadix, floatDigits, floatRange, decodeFloat, encodeFloat, isNaN, isInfinite, isDenormalized, isNegativeZero, isIEEE #-}
    
    1622
    +
    
    1600 1623
     module Data.STRef where
    
    1601 1624
       -- Safety: Safe
    
    1602 1625
       type role STRef nominal representational
    
    ... ... @@ -11960,6 +11983,8 @@ instance forall k (f :: k -> *) (a :: k). GHC.Internal.Enum.Enum (f a) => GHC.In
    11960 11983
     instance forall k (f :: k -> *) (a :: k). GHC.Internal.Enum.Enum (f a) => GHC.Internal.Enum.Enum (GHC.Internal.Data.Monoid.Ap f a) -- Defined in ‘GHC.Internal.Data.Monoid’
    
    11961 11984
     instance forall a. (GHC.Internal.Enum.Enum a, GHC.Internal.Enum.Bounded a, GHC.Internal.Classes.Eq a) => GHC.Internal.Enum.Enum (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’
    
    11962 11985
     instance forall a. GHC.Internal.Real.Integral a => GHC.Internal.Enum.Enum (GHC.Internal.Real.Ratio a) -- Defined in ‘GHC.Internal.Real’
    
    11986
    +instance GHC.Internal.Enum.Enum GHC.Internal.Types.Double -- Defined in ‘GHC.Internal.Float’
    
    11987
    +instance GHC.Internal.Enum.Enum GHC.Internal.Types.Float -- Defined in ‘GHC.Internal.Float’
    
    11963 11988
     instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (Data.Semigroup.First a) -- Defined in ‘Data.Semigroup’
    
    11964 11989
     instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (Data.Semigroup.Last a) -- Defined in ‘Data.Semigroup’
    
    11965 11990
     instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (Data.Semigroup.Max a) -- Defined in ‘Data.Semigroup’
    
    ... ... @@ -11999,8 +12024,6 @@ instance GHC.Internal.Enum.Enum GHC.Internal.Foreign.C.Types.CUSeconds -- Define
    11999 12024
     instance GHC.Internal.Enum.Enum GHC.Internal.Foreign.C.Types.CUShort -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12000 12025
     instance GHC.Internal.Enum.Enum GHC.Internal.Foreign.C.Types.CWchar -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12001 12026
     instance GHC.Internal.Enum.Enum GHC.Internal.ByteOrder.ByteOrder -- Defined in ‘GHC.Internal.ByteOrder’
    
    12002
    -instance GHC.Internal.Enum.Enum GHC.Internal.Types.Double -- Defined in ‘GHC.Internal.Float’
    
    12003
    -instance GHC.Internal.Enum.Enum GHC.Internal.Types.Float -- Defined in ‘GHC.Internal.Float’
    
    12004 12027
     instance GHC.Internal.Enum.Enum GHC.Internal.Generics.Associativity -- Defined in ‘GHC.Internal.Generics’
    
    12005 12028
     instance GHC.Internal.Enum.Enum GHC.Internal.Generics.DecidedStrictness -- Defined in ‘GHC.Internal.Generics’
    
    12006 12029
     instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceStrictness -- Defined in ‘GHC.Internal.Generics’
    
    ... ... @@ -12047,18 +12070,18 @@ instance forall k1 k2 (f :: k1 -> *) (g :: k2 -> k1) (a :: k2). GHC.Internal.Flo
    12047 12070
     instance forall a b. GHC.Internal.Float.Floating a => GHC.Internal.Float.Floating (Data.Functor.Contravariant.Op a b) -- Defined in ‘Data.Functor.Contravariant’
    
    12048 12071
     instance forall a. GHC.Internal.Float.Floating a => GHC.Internal.Float.Floating (GHC.Internal.Data.Functor.Identity.Identity a) -- Defined in ‘GHC.Internal.Data.Functor.Identity’
    
    12049 12072
     instance forall a. GHC.Internal.Float.Floating a => GHC.Internal.Float.Floating (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’
    
    12050
    -instance GHC.Internal.Float.Floating GHC.Internal.Foreign.C.Types.CDouble -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12051
    -instance GHC.Internal.Float.Floating GHC.Internal.Foreign.C.Types.CFloat -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12052 12073
     instance GHC.Internal.Float.Floating GHC.Internal.Types.Double -- Defined in ‘GHC.Internal.Float’
    
    12053 12074
     instance GHC.Internal.Float.Floating GHC.Internal.Types.Float -- Defined in ‘GHC.Internal.Float’
    
    12075
    +instance GHC.Internal.Float.Floating GHC.Internal.Foreign.C.Types.CDouble -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12076
    +instance GHC.Internal.Float.Floating GHC.Internal.Foreign.C.Types.CFloat -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12054 12077
     instance forall k a (b :: k). GHC.Internal.Float.RealFloat a => GHC.Internal.Float.RealFloat (GHC.Internal.Data.Functor.Const.Const a b) -- Defined in ‘GHC.Internal.Data.Functor.Const’
    
    12055 12078
     instance forall k1 k2 (f :: k1 -> *) (g :: k2 -> k1) (a :: k2). GHC.Internal.Float.RealFloat (f (g a)) => GHC.Internal.Float.RealFloat (Data.Functor.Compose.Compose f g a) -- Defined in ‘Data.Functor.Compose’
    
    12056 12079
     instance forall a. GHC.Internal.Float.RealFloat a => GHC.Internal.Float.RealFloat (GHC.Internal.Data.Functor.Identity.Identity a) -- Defined in ‘GHC.Internal.Data.Functor.Identity’
    
    12057 12080
     instance forall a. GHC.Internal.Float.RealFloat a => GHC.Internal.Float.RealFloat (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’
    
    12058
    -instance GHC.Internal.Float.RealFloat GHC.Internal.Foreign.C.Types.CDouble -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12059
    -instance GHC.Internal.Float.RealFloat GHC.Internal.Foreign.C.Types.CFloat -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12060 12081
     instance GHC.Internal.Float.RealFloat GHC.Internal.Types.Double -- Defined in ‘GHC.Internal.Float’
    
    12061 12082
     instance GHC.Internal.Float.RealFloat GHC.Internal.Types.Float -- Defined in ‘GHC.Internal.Float’
    
    12083
    +instance GHC.Internal.Float.RealFloat GHC.Internal.Foreign.C.Types.CDouble -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12084
    +instance GHC.Internal.Float.RealFloat GHC.Internal.Foreign.C.Types.CFloat -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12062 12085
     instance forall k a (b :: k). GHC.Internal.Foreign.Storable.Storable a => GHC.Internal.Foreign.Storable.Storable (GHC.Internal.Data.Functor.Const.Const a b) -- Defined in ‘GHC.Internal.Data.Functor.Const’
    
    12063 12086
     instance forall a. GHC.Internal.Foreign.Storable.Storable a => GHC.Internal.Foreign.Storable.Storable (Data.Complex.Complex a) -- Defined in ‘Data.Complex’
    
    12064 12087
     instance forall a. GHC.Internal.Foreign.Storable.Storable a => GHC.Internal.Foreign.Storable.Storable (GHC.Internal.Data.Functor.Identity.Identity a) -- Defined in ‘GHC.Internal.Data.Functor.Identity’
    
    ... ... @@ -12387,6 +12410,8 @@ instance forall a. GHC.Internal.Num.Num a => GHC.Internal.Num.Num (GHC.Internal.
    12387 12410
     instance forall (f :: * -> *) a. (GHC.Internal.Base.Applicative f, GHC.Internal.Num.Num a) => GHC.Internal.Num.Num (GHC.Internal.Data.Monoid.Ap f a) -- Defined in ‘GHC.Internal.Data.Monoid’
    
    12388 12411
     instance forall a. GHC.Internal.Num.Num a => GHC.Internal.Num.Num (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’
    
    12389 12412
     instance forall a. GHC.Internal.Real.Integral a => GHC.Internal.Num.Num (GHC.Internal.Real.Ratio a) -- Defined in ‘GHC.Internal.Real’
    
    12413
    +instance GHC.Internal.Num.Num GHC.Internal.Types.Double -- Defined in ‘GHC.Internal.Float’
    
    12414
    +instance GHC.Internal.Num.Num GHC.Internal.Types.Float -- Defined in ‘GHC.Internal.Float’
    
    12390 12415
     instance forall a. GHC.Internal.Num.Num a => GHC.Internal.Num.Num (Data.Semigroup.Max a) -- Defined in ‘Data.Semigroup’
    
    12391 12416
     instance forall a. GHC.Internal.Num.Num a => GHC.Internal.Num.Num (Data.Semigroup.Min a) -- Defined in ‘Data.Semigroup’
    
    12392 12417
     instance GHC.Internal.Num.Num GHC.Internal.Word.Word16 -- Defined in ‘GHC.Internal.Word’
    
    ... ... @@ -12421,8 +12446,6 @@ instance GHC.Internal.Num.Num GHC.Internal.Foreign.C.Types.CULong -- Defined in
    12421 12446
     instance GHC.Internal.Num.Num GHC.Internal.Foreign.C.Types.CUSeconds -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12422 12447
     instance GHC.Internal.Num.Num GHC.Internal.Foreign.C.Types.CUShort -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12423 12448
     instance GHC.Internal.Num.Num GHC.Internal.Foreign.C.Types.CWchar -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12424
    -instance GHC.Internal.Num.Num GHC.Internal.Types.Double -- Defined in ‘GHC.Internal.Float’
    
    12425
    -instance GHC.Internal.Num.Num GHC.Internal.Types.Float -- Defined in ‘GHC.Internal.Float’
    
    12426 12449
     instance GHC.Internal.Num.Num GHC.Internal.Types.Int -- Defined in ‘GHC.Internal.Num’
    
    12427 12450
     instance GHC.Internal.Num.Num GHC.Internal.Bignum.Integer.Integer -- Defined in ‘GHC.Internal.Num’
    
    12428 12451
     instance GHC.Internal.Num.Num GHC.Internal.Bignum.Natural.Natural -- Defined in ‘GHC.Internal.Num’
    
    ... ... @@ -12564,10 +12587,10 @@ instance forall a b. GHC.Internal.Real.Fractional a => GHC.Internal.Real.Fractio
    12564 12587
     instance forall a. GHC.Internal.Real.Fractional a => GHC.Internal.Real.Fractional (GHC.Internal.Data.Functor.Identity.Identity a) -- Defined in ‘GHC.Internal.Data.Functor.Identity’
    
    12565 12588
     instance forall a. GHC.Internal.Real.Fractional a => GHC.Internal.Real.Fractional (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’
    
    12566 12589
     instance forall a. GHC.Internal.Real.Integral a => GHC.Internal.Real.Fractional (GHC.Internal.Real.Ratio a) -- Defined in ‘GHC.Internal.Real’
    
    12567
    -instance GHC.Internal.Real.Fractional GHC.Internal.Foreign.C.Types.CDouble -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12568
    -instance GHC.Internal.Real.Fractional GHC.Internal.Foreign.C.Types.CFloat -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12569 12590
     instance GHC.Internal.Real.Fractional GHC.Internal.Types.Double -- Defined in ‘GHC.Internal.Float’
    
    12570 12591
     instance GHC.Internal.Real.Fractional GHC.Internal.Types.Float -- Defined in ‘GHC.Internal.Float’
    
    12592
    +instance GHC.Internal.Real.Fractional GHC.Internal.Foreign.C.Types.CDouble -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12593
    +instance GHC.Internal.Real.Fractional GHC.Internal.Foreign.C.Types.CFloat -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12571 12594
     instance forall k a (b :: k). GHC.Internal.Real.Integral a => GHC.Internal.Real.Integral (GHC.Internal.Data.Functor.Const.Const a b) -- Defined in ‘GHC.Internal.Data.Functor.Const’
    
    12572 12595
     instance forall k1 k2 (f :: k1 -> *) (g :: k2 -> k1) (a :: k2). GHC.Internal.Real.Integral (f (g a)) => GHC.Internal.Real.Integral (Data.Functor.Compose.Compose f g a) -- Defined in ‘Data.Functor.Compose’
    
    12573 12596
     instance forall a. GHC.Internal.Real.Integral a => GHC.Internal.Real.Integral (GHC.Internal.Data.Functor.Identity.Identity a) -- Defined in ‘GHC.Internal.Data.Functor.Identity’
    
    ... ... @@ -12619,6 +12642,8 @@ instance GHC.Internal.Real.Real GHC.Internal.Bignum.Integer.Integer -- Defined i
    12619 12642
     instance GHC.Internal.Real.Real GHC.Internal.Bignum.Natural.Natural -- Defined in ‘GHC.Internal.Real’
    
    12620 12643
     instance forall a. GHC.Internal.Real.Integral a => GHC.Internal.Real.Real (GHC.Internal.Real.Ratio a) -- Defined in ‘GHC.Internal.Real’
    
    12621 12644
     instance GHC.Internal.Real.Real GHC.Internal.Types.Word -- Defined in ‘GHC.Internal.Real’
    
    12645
    +instance GHC.Internal.Real.Real GHC.Internal.Types.Double -- Defined in ‘GHC.Internal.Float’
    
    12646
    +instance GHC.Internal.Real.Real GHC.Internal.Types.Float -- Defined in ‘GHC.Internal.Float’
    
    12622 12647
     instance GHC.Internal.Real.Real GHC.Internal.Word.Word16 -- Defined in ‘GHC.Internal.Word’
    
    12623 12648
     instance GHC.Internal.Real.Real GHC.Internal.Word.Word32 -- Defined in ‘GHC.Internal.Word’
    
    12624 12649
     instance GHC.Internal.Real.Real GHC.Internal.Word.Word64 -- Defined in ‘GHC.Internal.Word’
    
    ... ... @@ -12651,18 +12676,16 @@ instance GHC.Internal.Real.Real GHC.Internal.Foreign.C.Types.CULong -- Defined i
    12651 12676
     instance GHC.Internal.Real.Real GHC.Internal.Foreign.C.Types.CUSeconds -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12652 12677
     instance GHC.Internal.Real.Real GHC.Internal.Foreign.C.Types.CUShort -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12653 12678
     instance GHC.Internal.Real.Real GHC.Internal.Foreign.C.Types.CWchar -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12654
    -instance GHC.Internal.Real.Real GHC.Internal.Types.Double -- Defined in ‘GHC.Internal.Float’
    
    12655
    -instance GHC.Internal.Real.Real GHC.Internal.Types.Float -- Defined in ‘GHC.Internal.Float’
    
    12656 12679
     instance forall k a (b :: k). GHC.Internal.Real.RealFrac a => GHC.Internal.Real.RealFrac (GHC.Internal.Data.Functor.Const.Const a b) -- Defined in ‘GHC.Internal.Data.Functor.Const’
    
    12657 12680
     instance forall k (a :: k). Data.Fixed.HasResolution a => GHC.Internal.Real.RealFrac (Data.Fixed.Fixed a) -- Defined in ‘Data.Fixed’
    
    12658 12681
     instance forall k1 k2 (f :: k1 -> *) (g :: k2 -> k1) (a :: k2). GHC.Internal.Real.RealFrac (f (g a)) => GHC.Internal.Real.RealFrac (Data.Functor.Compose.Compose f g a) -- Defined in ‘Data.Functor.Compose’
    
    12659 12682
     instance forall a. GHC.Internal.Real.RealFrac a => GHC.Internal.Real.RealFrac (GHC.Internal.Data.Functor.Identity.Identity a) -- Defined in ‘GHC.Internal.Data.Functor.Identity’
    
    12660 12683
     instance forall a. GHC.Internal.Real.RealFrac a => GHC.Internal.Real.RealFrac (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’
    
    12661 12684
     instance forall a. GHC.Internal.Real.Integral a => GHC.Internal.Real.RealFrac (GHC.Internal.Real.Ratio a) -- Defined in ‘GHC.Internal.Real’
    
    12662
    -instance GHC.Internal.Real.RealFrac GHC.Internal.Foreign.C.Types.CDouble -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12663
    -instance GHC.Internal.Real.RealFrac GHC.Internal.Foreign.C.Types.CFloat -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12664 12685
     instance GHC.Internal.Real.RealFrac GHC.Internal.Types.Double -- Defined in ‘GHC.Internal.Float’
    
    12665 12686
     instance GHC.Internal.Real.RealFrac GHC.Internal.Types.Float -- Defined in ‘GHC.Internal.Float’
    
    12687
    +instance GHC.Internal.Real.RealFrac GHC.Internal.Foreign.C.Types.CDouble -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12688
    +instance GHC.Internal.Real.RealFrac GHC.Internal.Foreign.C.Types.CFloat -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12666 12689
     instance forall k a (b :: k). GHC.Internal.Show.Show a => GHC.Internal.Show.Show (GHC.Internal.Data.Functor.Const.Const a b) -- Defined in ‘GHC.Internal.Data.Functor.Const’
    
    12667 12690
     instance forall a. GHC.Internal.Show.Show a => GHC.Internal.Show.Show (GHC.Internal.Functor.ZipList.ZipList a) -- Defined in ‘GHC.Internal.Functor.ZipList’
    
    12668 12691
     instance GHC.Internal.Show.Show GHC.Internal.Conc.Sync.BlockReason -- Defined in ‘GHC.Internal.Conc.Sync’
    
    ... ... @@ -12776,6 +12799,8 @@ instance forall a. GHC.Internal.Show.Show a => GHC.Internal.Show.Show (GHC.Inter
    12776 12799
     instance forall a. GHC.Internal.Show.Show a => GHC.Internal.Show.Show (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’
    
    12777 12800
     instance GHC.Internal.Show.Show GHC.Internal.Real.FractionalExponentBase -- Defined in ‘GHC.Internal.Real’
    
    12778 12801
     instance forall a. GHC.Internal.Show.Show a => GHC.Internal.Show.Show (GHC.Internal.Real.Ratio a) -- Defined in ‘GHC.Internal.Real’
    
    12802
    +instance GHC.Internal.Show.Show GHC.Internal.Types.Double -- Defined in ‘GHC.Internal.Float’
    
    12803
    +instance GHC.Internal.Show.Show GHC.Internal.Types.Float -- Defined in ‘GHC.Internal.Float’
    
    12779 12804
     instance forall a b. (GHC.Internal.Show.Show a, GHC.Internal.Show.Show b) => GHC.Internal.Show.Show (Data.Semigroup.Arg a b) -- Defined in ‘Data.Semigroup’
    
    12780 12805
     instance forall a. GHC.Internal.Show.Show a => GHC.Internal.Show.Show (Data.Semigroup.First a) -- Defined in ‘Data.Semigroup’
    
    12781 12806
     instance forall a. GHC.Internal.Show.Show a => GHC.Internal.Show.Show (Data.Semigroup.Last a) -- Defined in ‘Data.Semigroup’
    
    ... ... @@ -12831,8 +12856,6 @@ instance GHC.Internal.Show.Show ghc-internal-10.100.0:GHC.Internal.Event.Manager
    12831 12856
     instance GHC.Internal.Show.Show ghc-internal-10.100.0:GHC.Internal.Event.Manager.State -- Defined in ‘ghc-internal-10.100.0:GHC.Internal.Event.Manager’
    
    12832 12857
     instance GHC.Internal.Show.Show ghc-internal-10.100.0:GHC.Internal.Event.TimerManager.State -- Defined in ‘ghc-internal-10.100.0:GHC.Internal.Event.TimerManager’
    
    12833 12858
     instance GHC.Internal.Show.Show GHC.Internal.Fingerprint.Type.Fingerprint -- Defined in ‘GHC.Internal.Fingerprint.Type’
    
    12834
    -instance GHC.Internal.Show.Show GHC.Internal.Types.Double -- Defined in ‘GHC.Internal.Float’
    
    12835
    -instance GHC.Internal.Show.Show GHC.Internal.Types.Float -- Defined in ‘GHC.Internal.Float’
    
    12836 12859
     instance forall k (f :: k -> *) (g :: k -> *) (p :: k). (GHC.Internal.Show.Show (f p), GHC.Internal.Show.Show (g p)) => GHC.Internal.Show.Show ((GHC.Internal.Generics.:*:) f g p) -- Defined in ‘GHC.Internal.Generics’
    
    12837 12860
     instance forall k (f :: k -> *) (g :: k -> *) (p :: k). (GHC.Internal.Show.Show (f p), GHC.Internal.Show.Show (g p)) => GHC.Internal.Show.Show ((GHC.Internal.Generics.:+:) f g p) -- Defined in ‘GHC.Internal.Generics’
    
    12838 12861
     instance forall k2 k1 (f :: k2 -> *) (g :: k1 -> k2) (p :: k1). GHC.Internal.Show.Show (f (g p)) => GHC.Internal.Show.Show ((GHC.Internal.Generics.:.:) f g p) -- Defined in ‘GHC.Internal.Generics’
    

  • testsuite/tests/interface-stability/base-exports.stdout-javascript-unknown-ghcjs
    ... ... @@ -1597,6 +1597,29 @@ module Data.Ratio where
    1597 1597
       denominator :: forall a. Ratio a -> a
    
    1598 1598
       numerator :: forall a. Ratio a -> a
    
    1599 1599
     
    
    1600
    +module Data.RealFloat where
    
    1601
    +  -- Safety: Safe
    
    1602
    +  pattern Infinity :: forall a. RealFloat a => a
    
    1603
    +  pattern NaN :: forall a. RealFloat a => a
    
    1604
    +  pattern NegInfinity :: forall a. RealFloat a => a
    
    1605
    +  type RealFloat :: * -> Constraint
    
    1606
    +  class (GHC.Internal.Real.RealFrac a, GHC.Internal.Float.Floating a) => RealFloat a where
    
    1607
    +    floatRadix :: a -> GHC.Internal.Bignum.Integer.Integer
    
    1608
    +    floatDigits :: a -> GHC.Internal.Types.Int
    
    1609
    +    floatRange :: a -> (GHC.Internal.Types.Int, GHC.Internal.Types.Int)
    
    1610
    +    decodeFloat :: a -> (GHC.Internal.Bignum.Integer.Integer, GHC.Internal.Types.Int)
    
    1611
    +    encodeFloat :: GHC.Internal.Bignum.Integer.Integer -> GHC.Internal.Types.Int -> a
    
    1612
    +    exponent :: a -> GHC.Internal.Types.Int
    
    1613
    +    significand :: a -> a
    
    1614
    +    scaleFloat :: GHC.Internal.Types.Int -> a -> a
    
    1615
    +    isNaN :: a -> GHC.Internal.Types.Bool
    
    1616
    +    isInfinite :: a -> GHC.Internal.Types.Bool
    
    1617
    +    isDenormalized :: a -> GHC.Internal.Types.Bool
    
    1618
    +    isNegativeZero :: a -> GHC.Internal.Types.Bool
    
    1619
    +    isIEEE :: a -> GHC.Internal.Types.Bool
    
    1620
    +    atan2 :: a -> a -> a
    
    1621
    +    {-# MINIMAL floatRadix, floatDigits, floatRange, decodeFloat, encodeFloat, isNaN, isInfinite, isDenormalized, isNegativeZero, isIEEE #-}
    
    1622
    +
    
    1600 1623
     module Data.STRef where
    
    1601 1624
       -- Safety: Safe
    
    1602 1625
       type role STRef nominal representational
    
    ... ... @@ -11987,6 +12010,8 @@ instance forall k (f :: k -> *) (a :: k). GHC.Internal.Enum.Enum (f a) => GHC.In
    11987 12010
     instance forall k (f :: k -> *) (a :: k). GHC.Internal.Enum.Enum (f a) => GHC.Internal.Enum.Enum (GHC.Internal.Data.Monoid.Ap f a) -- Defined in ‘GHC.Internal.Data.Monoid’
    
    11988 12011
     instance forall a. (GHC.Internal.Enum.Enum a, GHC.Internal.Enum.Bounded a, GHC.Internal.Classes.Eq a) => GHC.Internal.Enum.Enum (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’
    
    11989 12012
     instance forall a. GHC.Internal.Real.Integral a => GHC.Internal.Enum.Enum (GHC.Internal.Real.Ratio a) -- Defined in ‘GHC.Internal.Real’
    
    12013
    +instance GHC.Internal.Enum.Enum GHC.Internal.Types.Double -- Defined in ‘GHC.Internal.Float’
    
    12014
    +instance GHC.Internal.Enum.Enum GHC.Internal.Types.Float -- Defined in ‘GHC.Internal.Float’
    
    11990 12015
     instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (Data.Semigroup.First a) -- Defined in ‘Data.Semigroup’
    
    11991 12016
     instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (Data.Semigroup.Last a) -- Defined in ‘Data.Semigroup’
    
    11992 12017
     instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (Data.Semigroup.Max a) -- Defined in ‘Data.Semigroup’
    
    ... ... @@ -12026,8 +12051,6 @@ instance GHC.Internal.Enum.Enum GHC.Internal.Foreign.C.Types.CUSeconds -- Define
    12026 12051
     instance GHC.Internal.Enum.Enum GHC.Internal.Foreign.C.Types.CUShort -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12027 12052
     instance GHC.Internal.Enum.Enum GHC.Internal.Foreign.C.Types.CWchar -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12028 12053
     instance GHC.Internal.Enum.Enum GHC.Internal.ByteOrder.ByteOrder -- Defined in ‘GHC.Internal.ByteOrder’
    
    12029
    -instance GHC.Internal.Enum.Enum GHC.Internal.Types.Double -- Defined in ‘GHC.Internal.Float’
    
    12030
    -instance GHC.Internal.Enum.Enum GHC.Internal.Types.Float -- Defined in ‘GHC.Internal.Float’
    
    12031 12054
     instance GHC.Internal.Enum.Enum GHC.Internal.Generics.Associativity -- Defined in ‘GHC.Internal.Generics’
    
    12032 12055
     instance GHC.Internal.Enum.Enum GHC.Internal.Generics.DecidedStrictness -- Defined in ‘GHC.Internal.Generics’
    
    12033 12056
     instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceStrictness -- Defined in ‘GHC.Internal.Generics’
    
    ... ... @@ -12076,18 +12099,18 @@ instance forall k1 k2 (f :: k1 -> *) (g :: k2 -> k1) (a :: k2). GHC.Internal.Flo
    12076 12099
     instance forall a b. GHC.Internal.Float.Floating a => GHC.Internal.Float.Floating (Data.Functor.Contravariant.Op a b) -- Defined in ‘Data.Functor.Contravariant’
    
    12077 12100
     instance forall a. GHC.Internal.Float.Floating a => GHC.Internal.Float.Floating (GHC.Internal.Data.Functor.Identity.Identity a) -- Defined in ‘GHC.Internal.Data.Functor.Identity’
    
    12078 12101
     instance forall a. GHC.Internal.Float.Floating a => GHC.Internal.Float.Floating (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’
    
    12079
    -instance GHC.Internal.Float.Floating GHC.Internal.Foreign.C.Types.CDouble -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12080
    -instance GHC.Internal.Float.Floating GHC.Internal.Foreign.C.Types.CFloat -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12081 12102
     instance GHC.Internal.Float.Floating GHC.Internal.Types.Double -- Defined in ‘GHC.Internal.Float’
    
    12082 12103
     instance GHC.Internal.Float.Floating GHC.Internal.Types.Float -- Defined in ‘GHC.Internal.Float’
    
    12104
    +instance GHC.Internal.Float.Floating GHC.Internal.Foreign.C.Types.CDouble -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12105
    +instance GHC.Internal.Float.Floating GHC.Internal.Foreign.C.Types.CFloat -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12083 12106
     instance forall k a (b :: k). GHC.Internal.Float.RealFloat a => GHC.Internal.Float.RealFloat (GHC.Internal.Data.Functor.Const.Const a b) -- Defined in ‘GHC.Internal.Data.Functor.Const’
    
    12084 12107
     instance forall k1 k2 (f :: k1 -> *) (g :: k2 -> k1) (a :: k2). GHC.Internal.Float.RealFloat (f (g a)) => GHC.Internal.Float.RealFloat (Data.Functor.Compose.Compose f g a) -- Defined in ‘Data.Functor.Compose’
    
    12085 12108
     instance forall a. GHC.Internal.Float.RealFloat a => GHC.Internal.Float.RealFloat (GHC.Internal.Data.Functor.Identity.Identity a) -- Defined in ‘GHC.Internal.Data.Functor.Identity’
    
    12086 12109
     instance forall a. GHC.Internal.Float.RealFloat a => GHC.Internal.Float.RealFloat (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’
    
    12087
    -instance GHC.Internal.Float.RealFloat GHC.Internal.Foreign.C.Types.CDouble -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12088
    -instance GHC.Internal.Float.RealFloat GHC.Internal.Foreign.C.Types.CFloat -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12089 12110
     instance GHC.Internal.Float.RealFloat GHC.Internal.Types.Double -- Defined in ‘GHC.Internal.Float’
    
    12090 12111
     instance GHC.Internal.Float.RealFloat GHC.Internal.Types.Float -- Defined in ‘GHC.Internal.Float’
    
    12112
    +instance GHC.Internal.Float.RealFloat GHC.Internal.Foreign.C.Types.CDouble -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12113
    +instance GHC.Internal.Float.RealFloat GHC.Internal.Foreign.C.Types.CFloat -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12091 12114
     instance forall k a (b :: k). GHC.Internal.Foreign.Storable.Storable a => GHC.Internal.Foreign.Storable.Storable (GHC.Internal.Data.Functor.Const.Const a b) -- Defined in ‘GHC.Internal.Data.Functor.Const’
    
    12092 12115
     instance forall a. GHC.Internal.Foreign.Storable.Storable a => GHC.Internal.Foreign.Storable.Storable (Data.Complex.Complex a) -- Defined in ‘Data.Complex’
    
    12093 12116
     instance forall a. GHC.Internal.Foreign.Storable.Storable a => GHC.Internal.Foreign.Storable.Storable (GHC.Internal.Data.Functor.Identity.Identity a) -- Defined in ‘GHC.Internal.Data.Functor.Identity’
    
    ... ... @@ -12416,6 +12439,8 @@ instance forall a. GHC.Internal.Num.Num a => GHC.Internal.Num.Num (GHC.Internal.
    12416 12439
     instance forall (f :: * -> *) a. (GHC.Internal.Base.Applicative f, GHC.Internal.Num.Num a) => GHC.Internal.Num.Num (GHC.Internal.Data.Monoid.Ap f a) -- Defined in ‘GHC.Internal.Data.Monoid’
    
    12417 12440
     instance forall a. GHC.Internal.Num.Num a => GHC.Internal.Num.Num (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’
    
    12418 12441
     instance forall a. GHC.Internal.Real.Integral a => GHC.Internal.Num.Num (GHC.Internal.Real.Ratio a) -- Defined in ‘GHC.Internal.Real’
    
    12442
    +instance GHC.Internal.Num.Num GHC.Internal.Types.Double -- Defined in ‘GHC.Internal.Float’
    
    12443
    +instance GHC.Internal.Num.Num GHC.Internal.Types.Float -- Defined in ‘GHC.Internal.Float’
    
    12419 12444
     instance forall a. GHC.Internal.Num.Num a => GHC.Internal.Num.Num (Data.Semigroup.Max a) -- Defined in ‘Data.Semigroup’
    
    12420 12445
     instance forall a. GHC.Internal.Num.Num a => GHC.Internal.Num.Num (Data.Semigroup.Min a) -- Defined in ‘Data.Semigroup’
    
    12421 12446
     instance GHC.Internal.Num.Num GHC.Internal.Word.Word16 -- Defined in ‘GHC.Internal.Word’
    
    ... ... @@ -12450,8 +12475,6 @@ instance GHC.Internal.Num.Num GHC.Internal.Foreign.C.Types.CULong -- Defined in
    12450 12475
     instance GHC.Internal.Num.Num GHC.Internal.Foreign.C.Types.CUSeconds -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12451 12476
     instance GHC.Internal.Num.Num GHC.Internal.Foreign.C.Types.CUShort -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12452 12477
     instance GHC.Internal.Num.Num GHC.Internal.Foreign.C.Types.CWchar -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12453
    -instance GHC.Internal.Num.Num GHC.Internal.Types.Double -- Defined in ‘GHC.Internal.Float’
    
    12454
    -instance GHC.Internal.Num.Num GHC.Internal.Types.Float -- Defined in ‘GHC.Internal.Float’
    
    12455 12478
     instance GHC.Internal.Num.Num GHC.Internal.Types.Int -- Defined in ‘GHC.Internal.Num’
    
    12456 12479
     instance GHC.Internal.Num.Num GHC.Internal.Bignum.Integer.Integer -- Defined in ‘GHC.Internal.Num’
    
    12457 12480
     instance GHC.Internal.Num.Num GHC.Internal.Bignum.Natural.Natural -- Defined in ‘GHC.Internal.Num’
    
    ... ... @@ -12593,10 +12616,10 @@ instance forall a b. GHC.Internal.Real.Fractional a => GHC.Internal.Real.Fractio
    12593 12616
     instance forall a. GHC.Internal.Real.Fractional a => GHC.Internal.Real.Fractional (GHC.Internal.Data.Functor.Identity.Identity a) -- Defined in ‘GHC.Internal.Data.Functor.Identity’
    
    12594 12617
     instance forall a. GHC.Internal.Real.Fractional a => GHC.Internal.Real.Fractional (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’
    
    12595 12618
     instance forall a. GHC.Internal.Real.Integral a => GHC.Internal.Real.Fractional (GHC.Internal.Real.Ratio a) -- Defined in ‘GHC.Internal.Real’
    
    12596
    -instance GHC.Internal.Real.Fractional GHC.Internal.Foreign.C.Types.CDouble -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12597
    -instance GHC.Internal.Real.Fractional GHC.Internal.Foreign.C.Types.CFloat -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12598 12619
     instance GHC.Internal.Real.Fractional GHC.Internal.Types.Double -- Defined in ‘GHC.Internal.Float’
    
    12599 12620
     instance GHC.Internal.Real.Fractional GHC.Internal.Types.Float -- Defined in ‘GHC.Internal.Float’
    
    12621
    +instance GHC.Internal.Real.Fractional GHC.Internal.Foreign.C.Types.CDouble -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12622
    +instance GHC.Internal.Real.Fractional GHC.Internal.Foreign.C.Types.CFloat -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12600 12623
     instance forall k a (b :: k). GHC.Internal.Real.Integral a => GHC.Internal.Real.Integral (GHC.Internal.Data.Functor.Const.Const a b) -- Defined in ‘GHC.Internal.Data.Functor.Const’
    
    12601 12624
     instance forall k1 k2 (f :: k1 -> *) (g :: k2 -> k1) (a :: k2). GHC.Internal.Real.Integral (f (g a)) => GHC.Internal.Real.Integral (Data.Functor.Compose.Compose f g a) -- Defined in ‘Data.Functor.Compose’
    
    12602 12625
     instance forall a. GHC.Internal.Real.Integral a => GHC.Internal.Real.Integral (GHC.Internal.Data.Functor.Identity.Identity a) -- Defined in ‘GHC.Internal.Data.Functor.Identity’
    
    ... ... @@ -12648,6 +12671,8 @@ instance GHC.Internal.Real.Real GHC.Internal.Bignum.Integer.Integer -- Defined i
    12648 12671
     instance GHC.Internal.Real.Real GHC.Internal.Bignum.Natural.Natural -- Defined in ‘GHC.Internal.Real’
    
    12649 12672
     instance forall a. GHC.Internal.Real.Integral a => GHC.Internal.Real.Real (GHC.Internal.Real.Ratio a) -- Defined in ‘GHC.Internal.Real’
    
    12650 12673
     instance GHC.Internal.Real.Real GHC.Internal.Types.Word -- Defined in ‘GHC.Internal.Real’
    
    12674
    +instance GHC.Internal.Real.Real GHC.Internal.Types.Double -- Defined in ‘GHC.Internal.Float’
    
    12675
    +instance GHC.Internal.Real.Real GHC.Internal.Types.Float -- Defined in ‘GHC.Internal.Float’
    
    12651 12676
     instance GHC.Internal.Real.Real GHC.Internal.Word.Word16 -- Defined in ‘GHC.Internal.Word’
    
    12652 12677
     instance GHC.Internal.Real.Real GHC.Internal.Word.Word32 -- Defined in ‘GHC.Internal.Word’
    
    12653 12678
     instance GHC.Internal.Real.Real GHC.Internal.Word.Word64 -- Defined in ‘GHC.Internal.Word’
    
    ... ... @@ -12680,18 +12705,16 @@ instance GHC.Internal.Real.Real GHC.Internal.Foreign.C.Types.CULong -- Defined i
    12680 12705
     instance GHC.Internal.Real.Real GHC.Internal.Foreign.C.Types.CUSeconds -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12681 12706
     instance GHC.Internal.Real.Real GHC.Internal.Foreign.C.Types.CUShort -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12682 12707
     instance GHC.Internal.Real.Real GHC.Internal.Foreign.C.Types.CWchar -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12683
    -instance GHC.Internal.Real.Real GHC.Internal.Types.Double -- Defined in ‘GHC.Internal.Float’
    
    12684
    -instance GHC.Internal.Real.Real GHC.Internal.Types.Float -- Defined in ‘GHC.Internal.Float’
    
    12685 12708
     instance forall k a (b :: k). GHC.Internal.Real.RealFrac a => GHC.Internal.Real.RealFrac (GHC.Internal.Data.Functor.Const.Const a b) -- Defined in ‘GHC.Internal.Data.Functor.Const’
    
    12686 12709
     instance forall k (a :: k). Data.Fixed.HasResolution a => GHC.Internal.Real.RealFrac (Data.Fixed.Fixed a) -- Defined in ‘Data.Fixed’
    
    12687 12710
     instance forall k1 k2 (f :: k1 -> *) (g :: k2 -> k1) (a :: k2). GHC.Internal.Real.RealFrac (f (g a)) => GHC.Internal.Real.RealFrac (Data.Functor.Compose.Compose f g a) -- Defined in ‘Data.Functor.Compose’
    
    12688 12711
     instance forall a. GHC.Internal.Real.RealFrac a => GHC.Internal.Real.RealFrac (GHC.Internal.Data.Functor.Identity.Identity a) -- Defined in ‘GHC.Internal.Data.Functor.Identity’
    
    12689 12712
     instance forall a. GHC.Internal.Real.RealFrac a => GHC.Internal.Real.RealFrac (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’
    
    12690 12713
     instance forall a. GHC.Internal.Real.Integral a => GHC.Internal.Real.RealFrac (GHC.Internal.Real.Ratio a) -- Defined in ‘GHC.Internal.Real’
    
    12691
    -instance GHC.Internal.Real.RealFrac GHC.Internal.Foreign.C.Types.CDouble -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12692
    -instance GHC.Internal.Real.RealFrac GHC.Internal.Foreign.C.Types.CFloat -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12693 12714
     instance GHC.Internal.Real.RealFrac GHC.Internal.Types.Double -- Defined in ‘GHC.Internal.Float’
    
    12694 12715
     instance GHC.Internal.Real.RealFrac GHC.Internal.Types.Float -- Defined in ‘GHC.Internal.Float’
    
    12716
    +instance GHC.Internal.Real.RealFrac GHC.Internal.Foreign.C.Types.CDouble -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12717
    +instance GHC.Internal.Real.RealFrac GHC.Internal.Foreign.C.Types.CFloat -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12695 12718
     instance forall k a (b :: k). GHC.Internal.Show.Show a => GHC.Internal.Show.Show (GHC.Internal.Data.Functor.Const.Const a b) -- Defined in ‘GHC.Internal.Data.Functor.Const’
    
    12696 12719
     instance forall a. GHC.Internal.Show.Show a => GHC.Internal.Show.Show (GHC.Internal.Functor.ZipList.ZipList a) -- Defined in ‘GHC.Internal.Functor.ZipList’
    
    12697 12720
     instance GHC.Internal.Show.Show GHC.Internal.Conc.Sync.BlockReason -- Defined in ‘GHC.Internal.Conc.Sync’
    
    ... ... @@ -12805,6 +12828,8 @@ instance forall a. GHC.Internal.Show.Show a => GHC.Internal.Show.Show (GHC.Inter
    12805 12828
     instance forall a. GHC.Internal.Show.Show a => GHC.Internal.Show.Show (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’
    
    12806 12829
     instance GHC.Internal.Show.Show GHC.Internal.Real.FractionalExponentBase -- Defined in ‘GHC.Internal.Real’
    
    12807 12830
     instance forall a. GHC.Internal.Show.Show a => GHC.Internal.Show.Show (GHC.Internal.Real.Ratio a) -- Defined in ‘GHC.Internal.Real’
    
    12831
    +instance GHC.Internal.Show.Show GHC.Internal.Types.Double -- Defined in ‘GHC.Internal.Float’
    
    12832
    +instance GHC.Internal.Show.Show GHC.Internal.Types.Float -- Defined in ‘GHC.Internal.Float’
    
    12808 12833
     instance forall a b. (GHC.Internal.Show.Show a, GHC.Internal.Show.Show b) => GHC.Internal.Show.Show (Data.Semigroup.Arg a b) -- Defined in ‘Data.Semigroup’
    
    12809 12834
     instance forall a. GHC.Internal.Show.Show a => GHC.Internal.Show.Show (Data.Semigroup.First a) -- Defined in ‘Data.Semigroup’
    
    12810 12835
     instance forall a. GHC.Internal.Show.Show a => GHC.Internal.Show.Show (Data.Semigroup.Last a) -- Defined in ‘Data.Semigroup’
    
    ... ... @@ -12853,8 +12878,6 @@ instance forall a. GHC.Internal.Show.Show (GHC.Internal.Foreign.C.ConstPtr.Const
    12853 12878
     instance forall a b. (GHC.Internal.Ix.Ix a, GHC.Internal.Show.Show a, GHC.Internal.Show.Show b) => GHC.Internal.Show.Show (GHC.Internal.Arr.Array a b) -- Defined in ‘GHC.Internal.Arr’
    
    12854 12879
     instance GHC.Internal.Show.Show GHC.Internal.ByteOrder.ByteOrder -- Defined in ‘GHC.Internal.ByteOrder’
    
    12855 12880
     instance GHC.Internal.Show.Show GHC.Internal.Fingerprint.Type.Fingerprint -- Defined in ‘GHC.Internal.Fingerprint.Type’
    
    12856
    -instance GHC.Internal.Show.Show GHC.Internal.Types.Double -- Defined in ‘GHC.Internal.Float’
    
    12857
    -instance GHC.Internal.Show.Show GHC.Internal.Types.Float -- Defined in ‘GHC.Internal.Float’
    
    12858 12881
     instance forall k (f :: k -> *) (g :: k -> *) (p :: k). (GHC.Internal.Show.Show (f p), GHC.Internal.Show.Show (g p)) => GHC.Internal.Show.Show ((GHC.Internal.Generics.:*:) f g p) -- Defined in ‘GHC.Internal.Generics’
    
    12859 12882
     instance forall k (f :: k -> *) (g :: k -> *) (p :: k). (GHC.Internal.Show.Show (f p), GHC.Internal.Show.Show (g p)) => GHC.Internal.Show.Show ((GHC.Internal.Generics.:+:) f g p) -- Defined in ‘GHC.Internal.Generics’
    
    12860 12883
     instance forall k2 k1 (f :: k2 -> *) (g :: k1 -> k2) (p :: k1). GHC.Internal.Show.Show (f (g p)) => GHC.Internal.Show.Show ((GHC.Internal.Generics.:.:) f g p) -- Defined in ‘GHC.Internal.Generics’
    

  • testsuite/tests/interface-stability/base-exports.stdout-mingw32
    ... ... @@ -1597,6 +1597,29 @@ module Data.Ratio where
    1597 1597
       denominator :: forall a. Ratio a -> a
    
    1598 1598
       numerator :: forall a. Ratio a -> a
    
    1599 1599
     
    
    1600
    +module Data.RealFloat where
    
    1601
    +  -- Safety: Safe
    
    1602
    +  pattern Infinity :: forall a. RealFloat a => a
    
    1603
    +  pattern NaN :: forall a. RealFloat a => a
    
    1604
    +  pattern NegInfinity :: forall a. RealFloat a => a
    
    1605
    +  type RealFloat :: * -> Constraint
    
    1606
    +  class (GHC.Internal.Real.RealFrac a, GHC.Internal.Float.Floating a) => RealFloat a where
    
    1607
    +    floatRadix :: a -> GHC.Internal.Bignum.Integer.Integer
    
    1608
    +    floatDigits :: a -> GHC.Internal.Types.Int
    
    1609
    +    floatRange :: a -> (GHC.Internal.Types.Int, GHC.Internal.Types.Int)
    
    1610
    +    decodeFloat :: a -> (GHC.Internal.Bignum.Integer.Integer, GHC.Internal.Types.Int)
    
    1611
    +    encodeFloat :: GHC.Internal.Bignum.Integer.Integer -> GHC.Internal.Types.Int -> a
    
    1612
    +    exponent :: a -> GHC.Internal.Types.Int
    
    1613
    +    significand :: a -> a
    
    1614
    +    scaleFloat :: GHC.Internal.Types.Int -> a -> a
    
    1615
    +    isNaN :: a -> GHC.Internal.Types.Bool
    
    1616
    +    isInfinite :: a -> GHC.Internal.Types.Bool
    
    1617
    +    isDenormalized :: a -> GHC.Internal.Types.Bool
    
    1618
    +    isNegativeZero :: a -> GHC.Internal.Types.Bool
    
    1619
    +    isIEEE :: a -> GHC.Internal.Types.Bool
    
    1620
    +    atan2 :: a -> a -> a
    
    1621
    +    {-# MINIMAL floatRadix, floatDigits, floatRange, decodeFloat, encodeFloat, isNaN, isInfinite, isDenormalized, isNegativeZero, isIEEE #-}
    
    1622
    +
    
    1600 1623
     module Data.STRef where
    
    1601 1624
       -- Safety: Safe
    
    1602 1625
       type role STRef nominal representational
    
    ... ... @@ -12218,6 +12241,8 @@ instance forall k (f :: k -> *) (a :: k). GHC.Internal.Enum.Enum (f a) => GHC.In
    12218 12241
     instance forall k (f :: k -> *) (a :: k). GHC.Internal.Enum.Enum (f a) => GHC.Internal.Enum.Enum (GHC.Internal.Data.Monoid.Ap f a) -- Defined in ‘GHC.Internal.Data.Monoid’
    
    12219 12242
     instance forall a. (GHC.Internal.Enum.Enum a, GHC.Internal.Enum.Bounded a, GHC.Internal.Classes.Eq a) => GHC.Internal.Enum.Enum (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’
    
    12220 12243
     instance forall a. GHC.Internal.Real.Integral a => GHC.Internal.Enum.Enum (GHC.Internal.Real.Ratio a) -- Defined in ‘GHC.Internal.Real’
    
    12244
    +instance GHC.Internal.Enum.Enum GHC.Internal.Types.Double -- Defined in ‘GHC.Internal.Float’
    
    12245
    +instance GHC.Internal.Enum.Enum GHC.Internal.Types.Float -- Defined in ‘GHC.Internal.Float’
    
    12221 12246
     instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (Data.Semigroup.First a) -- Defined in ‘Data.Semigroup’
    
    12222 12247
     instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (Data.Semigroup.Last a) -- Defined in ‘Data.Semigroup’
    
    12223 12248
     instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (Data.Semigroup.Max a) -- Defined in ‘Data.Semigroup’
    
    ... ... @@ -12258,8 +12283,6 @@ instance GHC.Internal.Enum.Enum GHC.Internal.Foreign.C.Types.CUShort -- Defined
    12258 12283
     instance GHC.Internal.Enum.Enum GHC.Internal.Foreign.C.Types.CWchar -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12259 12284
     instance GHC.Internal.Enum.Enum GHC.Internal.ByteOrder.ByteOrder -- Defined in ‘GHC.Internal.ByteOrder’
    
    12260 12285
     instance GHC.Internal.Enum.Enum GHC.Internal.Event.Windows.ConsoleEvent.ConsoleEvent -- Defined in ‘GHC.Internal.Event.Windows.ConsoleEvent’
    
    12261
    -instance GHC.Internal.Enum.Enum GHC.Internal.Types.Double -- Defined in ‘GHC.Internal.Float’
    
    12262
    -instance GHC.Internal.Enum.Enum GHC.Internal.Types.Float -- Defined in ‘GHC.Internal.Float’
    
    12263 12286
     instance GHC.Internal.Enum.Enum GHC.Internal.Generics.Associativity -- Defined in ‘GHC.Internal.Generics’
    
    12264 12287
     instance GHC.Internal.Enum.Enum GHC.Internal.Generics.DecidedStrictness -- Defined in ‘GHC.Internal.Generics’
    
    12265 12288
     instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceStrictness -- Defined in ‘GHC.Internal.Generics’
    
    ... ... @@ -12306,18 +12329,18 @@ instance forall k1 k2 (f :: k1 -> *) (g :: k2 -> k1) (a :: k2). GHC.Internal.Flo
    12306 12329
     instance forall a b. GHC.Internal.Float.Floating a => GHC.Internal.Float.Floating (Data.Functor.Contravariant.Op a b) -- Defined in ‘Data.Functor.Contravariant’
    
    12307 12330
     instance forall a. GHC.Internal.Float.Floating a => GHC.Internal.Float.Floating (GHC.Internal.Data.Functor.Identity.Identity a) -- Defined in ‘GHC.Internal.Data.Functor.Identity’
    
    12308 12331
     instance forall a. GHC.Internal.Float.Floating a => GHC.Internal.Float.Floating (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’
    
    12309
    -instance GHC.Internal.Float.Floating GHC.Internal.Foreign.C.Types.CDouble -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12310
    -instance GHC.Internal.Float.Floating GHC.Internal.Foreign.C.Types.CFloat -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12311 12332
     instance GHC.Internal.Float.Floating GHC.Internal.Types.Double -- Defined in ‘GHC.Internal.Float’
    
    12312 12333
     instance GHC.Internal.Float.Floating GHC.Internal.Types.Float -- Defined in ‘GHC.Internal.Float’
    
    12334
    +instance GHC.Internal.Float.Floating GHC.Internal.Foreign.C.Types.CDouble -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12335
    +instance GHC.Internal.Float.Floating GHC.Internal.Foreign.C.Types.CFloat -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12313 12336
     instance forall k a (b :: k). GHC.Internal.Float.RealFloat a => GHC.Internal.Float.RealFloat (GHC.Internal.Data.Functor.Const.Const a b) -- Defined in ‘GHC.Internal.Data.Functor.Const’
    
    12314 12337
     instance forall k1 k2 (f :: k1 -> *) (g :: k2 -> k1) (a :: k2). GHC.Internal.Float.RealFloat (f (g a)) => GHC.Internal.Float.RealFloat (Data.Functor.Compose.Compose f g a) -- Defined in ‘Data.Functor.Compose’
    
    12315 12338
     instance forall a. GHC.Internal.Float.RealFloat a => GHC.Internal.Float.RealFloat (GHC.Internal.Data.Functor.Identity.Identity a) -- Defined in ‘GHC.Internal.Data.Functor.Identity’
    
    12316 12339
     instance forall a. GHC.Internal.Float.RealFloat a => GHC.Internal.Float.RealFloat (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’
    
    12317
    -instance GHC.Internal.Float.RealFloat GHC.Internal.Foreign.C.Types.CDouble -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12318
    -instance GHC.Internal.Float.RealFloat GHC.Internal.Foreign.C.Types.CFloat -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12319 12340
     instance GHC.Internal.Float.RealFloat GHC.Internal.Types.Double -- Defined in ‘GHC.Internal.Float’
    
    12320 12341
     instance GHC.Internal.Float.RealFloat GHC.Internal.Types.Float -- Defined in ‘GHC.Internal.Float’
    
    12342
    +instance GHC.Internal.Float.RealFloat GHC.Internal.Foreign.C.Types.CDouble -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12343
    +instance GHC.Internal.Float.RealFloat GHC.Internal.Foreign.C.Types.CFloat -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12321 12344
     instance forall k a (b :: k). GHC.Internal.Foreign.Storable.Storable a => GHC.Internal.Foreign.Storable.Storable (GHC.Internal.Data.Functor.Const.Const a b) -- Defined in ‘GHC.Internal.Data.Functor.Const’
    
    12322 12345
     instance forall a. GHC.Internal.Foreign.Storable.Storable a => GHC.Internal.Foreign.Storable.Storable (Data.Complex.Complex a) -- Defined in ‘Data.Complex’
    
    12323 12346
     instance forall a. GHC.Internal.Foreign.Storable.Storable a => GHC.Internal.Foreign.Storable.Storable (GHC.Internal.Data.Functor.Identity.Identity a) -- Defined in ‘GHC.Internal.Data.Functor.Identity’
    
    ... ... @@ -12658,6 +12681,8 @@ instance forall a. GHC.Internal.Num.Num a => GHC.Internal.Num.Num (GHC.Internal.
    12658 12681
     instance forall (f :: * -> *) a. (GHC.Internal.Base.Applicative f, GHC.Internal.Num.Num a) => GHC.Internal.Num.Num (GHC.Internal.Data.Monoid.Ap f a) -- Defined in ‘GHC.Internal.Data.Monoid’
    
    12659 12682
     instance forall a. GHC.Internal.Num.Num a => GHC.Internal.Num.Num (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’
    
    12660 12683
     instance forall a. GHC.Internal.Real.Integral a => GHC.Internal.Num.Num (GHC.Internal.Real.Ratio a) -- Defined in ‘GHC.Internal.Real’
    
    12684
    +instance GHC.Internal.Num.Num GHC.Internal.Types.Double -- Defined in ‘GHC.Internal.Float’
    
    12685
    +instance GHC.Internal.Num.Num GHC.Internal.Types.Float -- Defined in ‘GHC.Internal.Float’
    
    12661 12686
     instance forall a. GHC.Internal.Num.Num a => GHC.Internal.Num.Num (Data.Semigroup.Max a) -- Defined in ‘Data.Semigroup’
    
    12662 12687
     instance forall a. GHC.Internal.Num.Num a => GHC.Internal.Num.Num (Data.Semigroup.Min a) -- Defined in ‘Data.Semigroup’
    
    12663 12688
     instance GHC.Internal.Num.Num GHC.Internal.Word.Word16 -- Defined in ‘GHC.Internal.Word’
    
    ... ... @@ -12692,8 +12717,6 @@ instance GHC.Internal.Num.Num GHC.Internal.Foreign.C.Types.CULong -- Defined in
    12692 12717
     instance GHC.Internal.Num.Num GHC.Internal.Foreign.C.Types.CUSeconds -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12693 12718
     instance GHC.Internal.Num.Num GHC.Internal.Foreign.C.Types.CUShort -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12694 12719
     instance GHC.Internal.Num.Num GHC.Internal.Foreign.C.Types.CWchar -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12695
    -instance GHC.Internal.Num.Num GHC.Internal.Types.Double -- Defined in ‘GHC.Internal.Float’
    
    12696
    -instance GHC.Internal.Num.Num GHC.Internal.Types.Float -- Defined in ‘GHC.Internal.Float’
    
    12697 12720
     instance GHC.Internal.Num.Num GHC.Internal.Types.Int -- Defined in ‘GHC.Internal.Num’
    
    12698 12721
     instance GHC.Internal.Num.Num GHC.Internal.Bignum.Integer.Integer -- Defined in ‘GHC.Internal.Num’
    
    12699 12722
     instance GHC.Internal.Num.Num GHC.Internal.Bignum.Natural.Natural -- Defined in ‘GHC.Internal.Num’
    
    ... ... @@ -12836,10 +12859,10 @@ instance forall a b. GHC.Internal.Real.Fractional a => GHC.Internal.Real.Fractio
    12836 12859
     instance forall a. GHC.Internal.Real.Fractional a => GHC.Internal.Real.Fractional (GHC.Internal.Data.Functor.Identity.Identity a) -- Defined in ‘GHC.Internal.Data.Functor.Identity’
    
    12837 12860
     instance forall a. GHC.Internal.Real.Fractional a => GHC.Internal.Real.Fractional (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’
    
    12838 12861
     instance forall a. GHC.Internal.Real.Integral a => GHC.Internal.Real.Fractional (GHC.Internal.Real.Ratio a) -- Defined in ‘GHC.Internal.Real’
    
    12839
    -instance GHC.Internal.Real.Fractional GHC.Internal.Foreign.C.Types.CDouble -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12840
    -instance GHC.Internal.Real.Fractional GHC.Internal.Foreign.C.Types.CFloat -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12841 12862
     instance GHC.Internal.Real.Fractional GHC.Internal.Types.Double -- Defined in ‘GHC.Internal.Float’
    
    12842 12863
     instance GHC.Internal.Real.Fractional GHC.Internal.Types.Float -- Defined in ‘GHC.Internal.Float’
    
    12864
    +instance GHC.Internal.Real.Fractional GHC.Internal.Foreign.C.Types.CDouble -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12865
    +instance GHC.Internal.Real.Fractional GHC.Internal.Foreign.C.Types.CFloat -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12843 12866
     instance forall k a (b :: k). GHC.Internal.Real.Integral a => GHC.Internal.Real.Integral (GHC.Internal.Data.Functor.Const.Const a b) -- Defined in ‘GHC.Internal.Data.Functor.Const’
    
    12844 12867
     instance forall k1 k2 (f :: k1 -> *) (g :: k2 -> k1) (a :: k2). GHC.Internal.Real.Integral (f (g a)) => GHC.Internal.Real.Integral (Data.Functor.Compose.Compose f g a) -- Defined in ‘Data.Functor.Compose’
    
    12845 12868
     instance forall a. GHC.Internal.Real.Integral a => GHC.Internal.Real.Integral (GHC.Internal.Data.Functor.Identity.Identity a) -- Defined in ‘GHC.Internal.Data.Functor.Identity’
    
    ... ... @@ -12891,6 +12914,8 @@ instance GHC.Internal.Real.Real GHC.Internal.Bignum.Integer.Integer -- Defined i
    12891 12914
     instance GHC.Internal.Real.Real GHC.Internal.Bignum.Natural.Natural -- Defined in ‘GHC.Internal.Real’
    
    12892 12915
     instance forall a. GHC.Internal.Real.Integral a => GHC.Internal.Real.Real (GHC.Internal.Real.Ratio a) -- Defined in ‘GHC.Internal.Real’
    
    12893 12916
     instance GHC.Internal.Real.Real GHC.Internal.Types.Word -- Defined in ‘GHC.Internal.Real’
    
    12917
    +instance GHC.Internal.Real.Real GHC.Internal.Types.Double -- Defined in ‘GHC.Internal.Float’
    
    12918
    +instance GHC.Internal.Real.Real GHC.Internal.Types.Float -- Defined in ‘GHC.Internal.Float’
    
    12894 12919
     instance GHC.Internal.Real.Real GHC.Internal.Word.Word16 -- Defined in ‘GHC.Internal.Word’
    
    12895 12920
     instance GHC.Internal.Real.Real GHC.Internal.Word.Word32 -- Defined in ‘GHC.Internal.Word’
    
    12896 12921
     instance GHC.Internal.Real.Real GHC.Internal.Word.Word64 -- Defined in ‘GHC.Internal.Word’
    
    ... ... @@ -12923,18 +12948,16 @@ instance GHC.Internal.Real.Real GHC.Internal.Foreign.C.Types.CULong -- Defined i
    12923 12948
     instance GHC.Internal.Real.Real GHC.Internal.Foreign.C.Types.CUSeconds -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12924 12949
     instance GHC.Internal.Real.Real GHC.Internal.Foreign.C.Types.CUShort -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12925 12950
     instance GHC.Internal.Real.Real GHC.Internal.Foreign.C.Types.CWchar -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12926
    -instance GHC.Internal.Real.Real GHC.Internal.Types.Double -- Defined in ‘GHC.Internal.Float’
    
    12927
    -instance GHC.Internal.Real.Real GHC.Internal.Types.Float -- Defined in ‘GHC.Internal.Float’
    
    12928 12951
     instance forall k a (b :: k). GHC.Internal.Real.RealFrac a => GHC.Internal.Real.RealFrac (GHC.Internal.Data.Functor.Const.Const a b) -- Defined in ‘GHC.Internal.Data.Functor.Const’
    
    12929 12952
     instance forall k (a :: k). Data.Fixed.HasResolution a => GHC.Internal.Real.RealFrac (Data.Fixed.Fixed a) -- Defined in ‘Data.Fixed’
    
    12930 12953
     instance forall k1 k2 (f :: k1 -> *) (g :: k2 -> k1) (a :: k2). GHC.Internal.Real.RealFrac (f (g a)) => GHC.Internal.Real.RealFrac (Data.Functor.Compose.Compose f g a) -- Defined in ‘Data.Functor.Compose’
    
    12931 12954
     instance forall a. GHC.Internal.Real.RealFrac a => GHC.Internal.Real.RealFrac (GHC.Internal.Data.Functor.Identity.Identity a) -- Defined in ‘GHC.Internal.Data.Functor.Identity’
    
    12932 12955
     instance forall a. GHC.Internal.Real.RealFrac a => GHC.Internal.Real.RealFrac (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’
    
    12933 12956
     instance forall a. GHC.Internal.Real.Integral a => GHC.Internal.Real.RealFrac (GHC.Internal.Real.Ratio a) -- Defined in ‘GHC.Internal.Real’
    
    12934
    -instance GHC.Internal.Real.RealFrac GHC.Internal.Foreign.C.Types.CDouble -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12935
    -instance GHC.Internal.Real.RealFrac GHC.Internal.Foreign.C.Types.CFloat -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12936 12957
     instance GHC.Internal.Real.RealFrac GHC.Internal.Types.Double -- Defined in ‘GHC.Internal.Float’
    
    12937 12958
     instance GHC.Internal.Real.RealFrac GHC.Internal.Types.Float -- Defined in ‘GHC.Internal.Float’
    
    12959
    +instance GHC.Internal.Real.RealFrac GHC.Internal.Foreign.C.Types.CDouble -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12960
    +instance GHC.Internal.Real.RealFrac GHC.Internal.Foreign.C.Types.CFloat -- Defined in ‘GHC.Internal.Foreign.C.Types’
    
    12938 12961
     instance forall k a (b :: k). GHC.Internal.Show.Show a => GHC.Internal.Show.Show (GHC.Internal.Data.Functor.Const.Const a b) -- Defined in ‘GHC.Internal.Data.Functor.Const’
    
    12939 12962
     instance forall a. GHC.Internal.Show.Show a => GHC.Internal.Show.Show (GHC.Internal.Functor.ZipList.ZipList a) -- Defined in ‘GHC.Internal.Functor.ZipList’
    
    12940 12963
     instance GHC.Internal.Show.Show GHC.Internal.Conc.Sync.BlockReason -- Defined in ‘GHC.Internal.Conc.Sync’
    
    ... ... @@ -13048,6 +13071,8 @@ instance forall a. GHC.Internal.Show.Show a => GHC.Internal.Show.Show (GHC.Inter
    13048 13071
     instance forall a. GHC.Internal.Show.Show a => GHC.Internal.Show.Show (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’
    
    13049 13072
     instance GHC.Internal.Show.Show GHC.Internal.Real.FractionalExponentBase -- Defined in ‘GHC.Internal.Real’
    
    13050 13073
     instance forall a. GHC.Internal.Show.Show a => GHC.Internal.Show.Show (GHC.Internal.Real.Ratio a) -- Defined in ‘GHC.Internal.Real’
    
    13074
    +instance GHC.Internal.Show.Show GHC.Internal.Types.Double -- Defined in ‘GHC.Internal.Float’
    
    13075
    +instance GHC.Internal.Show.Show GHC.Internal.Types.Float -- Defined in ‘GHC.Internal.Float’
    
    13051 13076
     instance forall a b. (GHC.Internal.Show.Show a, GHC.Internal.Show.Show b) => GHC.Internal.Show.Show (Data.Semigroup.Arg a b) -- Defined in ‘Data.Semigroup’
    
    13052 13077
     instance forall a. GHC.Internal.Show.Show a => GHC.Internal.Show.Show (Data.Semigroup.First a) -- Defined in ‘Data.Semigroup’
    
    13053 13078
     instance forall a. GHC.Internal.Show.Show a => GHC.Internal.Show.Show (Data.Semigroup.Last a) -- Defined in ‘Data.Semigroup’
    
    ... ... @@ -13100,8 +13125,6 @@ instance forall a. GHC.Internal.Show.Show a => GHC.Internal.Show.Show (GHC.Inter
    13100 13125
     instance GHC.Internal.Show.Show GHC.Internal.Event.Windows.HandleKey -- Defined in ‘GHC.Internal.Event.Windows’
    
    13101 13126
     instance GHC.Internal.Show.Show GHC.Internal.Event.Windows.FFI.IOCP -- Defined in ‘GHC.Internal.Event.Windows.FFI’
    
    13102 13127
     instance GHC.Internal.Show.Show GHC.Internal.Fingerprint.Type.Fingerprint -- Defined in ‘GHC.Internal.Fingerprint.Type’
    
    13103
    -instance GHC.Internal.Show.Show GHC.Internal.Types.Double -- Defined in ‘GHC.Internal.Float’
    
    13104
    -instance GHC.Internal.Show.Show GHC.Internal.Types.Float -- Defined in ‘GHC.Internal.Float’
    
    13105 13128
     instance forall k (f :: k -> *) (g :: k -> *) (p :: k). (GHC.Internal.Show.Show (f p), GHC.Internal.Show.Show (g p)) => GHC.Internal.Show.Show ((GHC.Internal.Generics.:*:) f g p) -- Defined in ‘GHC.Internal.Generics’
    
    13106 13129
     instance forall k (f :: k -> *) (g :: k -> *) (p :: k). (GHC.Internal.Show.Show (f p), GHC.Internal.Show.Show (g p)) => GHC.Internal.Show.Show ((GHC.Internal.Generics.:+:) f g p) -- Defined in ‘GHC.Internal.Generics’
    
    13107 13130
     instance forall k2 k1 (f :: k2 -> *) (g :: k1 -> k2) (p :: k1). GHC.Internal.Show.Show (f (g p)) => GHC.Internal.Show.Show ((GHC.Internal.Generics.:.:) f g p) -- Defined in ‘GHC.Internal.Generics’
    

  • testsuite/tests/interface-stability/base-exports.stdout-ws-32 deleted The diff for this file was not included because it is too large.
  • testsuite/tests/th/T27022.hs
    1
    +{-# LANGUAGE TemplateHaskell #-}
    
    2
    +-- | This tests the behaviour of TH's recover method.
    
    3
    +-- It should behave the same in the internal and external interperter.
    
    4
    +-- In the past, they have diverged, and the external interpreter would roll back the state of putQ/getQ whereas the internal interpreter would not.
    
    5
    +module Main where
    
    6
    +
    
    7
    +import Language.Haskell.TH.Syntax
    
    8
    +main = print $(putQ "0" >> recover (pure ()) (putQ "42" >> fail "oops")  >> getQ @String >>= lift )

  • testsuite/tests/th/T27022.stdout
    1
    +Just "42"

  • testsuite/tests/th/all.T
    ... ... @@ -650,3 +650,4 @@ test('GadtConSigs_th_dump1', normal, compile, ['-v0 -ddump-splices -dsuppress-un
    650 650
     test('T26099', normal, compile_fail, [''])
    
    651 651
     test('T8306_th', only_ways(['ghci']), ghci_script, ['T8306_th.script'])
    
    652 652
     test('T26862_th', only_ways(['ghci']), ghci_script, ['T26862_th.script'])
    
    653
    +test('T27022', normal, compile_and_run, [''])