diff options
author | Ben Gamari <ben@smart-cactus.org> | 2022-03-01 13:50:20 -0500 |
---|---|---|
committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2022-04-25 10:18:54 -0400 |
commit | e7c4719d8990a58abd9073731a36922a843ba797 (patch) | |
tree | cf286fc7835fd930106ceb2314dc55a985dc31fa /libraries | |
parent | 9af091f7ced3c76abf86b607d775c0746bfbabd7 (diff) | |
download | haskell-e7c4719d8990a58abd9073731a36922a843ba797.tar.gz |
Ensure that wired-in exception closures aren't GC'd
As described in Note [Wired-in exceptions are not CAFfy], a small set of
built-in exception closures get special treatment in the code generator,
being declared as non-CAFfy despite potentially containing CAF
references. The original intent of this treatment for the RTS to then
add StablePtrs for each of the closures, ensuring that they are not
GC'd. However, this logic was not applied consistently and eventually
removed entirely in 951c1fb0. This lead to #21141.
Here we fix this bug by reintroducing the StablePtrs and document the
status quo.
Closes #21141.
Diffstat (limited to 'libraries')
-rw-r--r-- | libraries/ghc-prim/GHC/Prim/Exception.hs | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/libraries/ghc-prim/GHC/Prim/Exception.hs b/libraries/ghc-prim/GHC/Prim/Exception.hs index 9d496d397c..0b9e9c165c 100644 --- a/libraries/ghc-prim/GHC/Prim/Exception.hs +++ b/libraries/ghc-prim/GHC/Prim/Exception.hs @@ -26,6 +26,8 @@ default () -- Double and Integer aren't available yet -- precision numbers (Natural,Integer). It can't depend on `base` package to -- raise exceptions in a normal way because it would create a dependency -- cycle (base <-> bignum package). See #14664 +-- +-- See also: Note [Wired-in exceptions are not CAFfy] in GHC.Core.Make. foreign import prim "stg_raiseOverflowzh" raiseOverflow# :: State# RealWorld -> (# State# RealWorld, (# #) #) foreign import prim "stg_raiseUnderflowzh" raiseUnderflow# :: State# RealWorld -> (# State# RealWorld, (# #) #) |