diff --git a/compiler/cmm/Hoopl/Block.hs b/compiler/cmm/Hoopl/Block.hs
--- a/compiler/cmm/Hoopl/Block.hs
+++ b/compiler/cmm/Hoopl/Block.hs
@@ -1,12 +1,15 @@
+{-# LANGUAGE DataKinds #-}
 {-# LANGUAGE DeriveFunctor #-}
 {-# LANGUAGE GADTs #-}
+{-# LANGUAGE PolyKinds #-}
 {-# LANGUAGE RankNTypes #-}
 {-# LANGUAGE ScopedTypeVariables #-}
-{-# LANGUAGE TypeFamilies #-}
 {-# LANGUAGE StandaloneDeriving #-}
+{-# LANGUAGE TypeFamilies #-}
 module Hoopl.Block
-    ( C
+    ( Extensibility (..)
     , O
+    , C
     , MaybeO(..)
     , IndexedCO
     , Block(..)
@@ -40,19 +43,21 @@
 -- -----------------------------------------------------------------------------
 -- Shapes: Open and Closed
 
--- | Used at the type level to indicate an "open" structure with
--- a unique, unnamed control-flow edge flowing in or out.
--- "Fallthrough" and concatenation are permitted at an open point.
-data O
+-- | Used at the type level to indicate "open" vs "closed" structure.
+data Extensibility
+  -- | An "open" structure with a unique, unnamed control-flow edge flowing in
+  -- or out. "Fallthrough" and concatenation are permitted at an open point.
+  = Open
+  -- | A "closed" structure which supports control transfer only through the use
+  -- of named labels---no "fallthrough" is permitted. The number of control-flow
+  -- edges is unconstrained.
+  | Closed
 
--- | Used at the type level to indicate a "closed" structure which
--- supports control transfer only through the use of named
--- labels---no "fallthrough" is permitted.  The number of control-flow
--- edges is unconstrained.
-data C
+type O = 'Open
+type C = 'Closed
 
 -- | Either type indexed by closed/open using type families
-type family IndexedCO ex a b :: *
+type family IndexedCO (ex :: Extensibility) (a :: k) (b :: k) :: k
 type instance IndexedCO C a _b = a
 type instance IndexedCO O _a b = b
 
diff --git a/compiler/cmm/Hoopl/Dataflow.hs b/compiler/cmm/Hoopl/Dataflow.hs
--- a/compiler/cmm/Hoopl/Dataflow.hs
+++ b/compiler/cmm/Hoopl/Dataflow.hs
@@ -1,9 +1,11 @@
 {-# LANGUAGE BangPatterns #-}
+{-# LANGUAGE DataKinds #-}
 {-# LANGUAGE GADTs #-}
 {-# LANGUAGE MultiParamTypeClasses  #-}
 {-# LANGUAGE RankNTypes #-}
 {-# LANGUAGE ScopedTypeVariables #-}
 {-# LANGUAGE TypeFamilies #-}
+
 {-# OPTIONS_GHC -fprof-auto-top #-}
 
 --
@@ -49,7 +51,7 @@
 import Hoopl.Collections
 import Hoopl.Label
 
-type family   Fact x f :: *
+type family   Fact (x :: Extensibility) f :: *
 type instance Fact C f = FactBase f
 type instance Fact O f = f
 
diff --git a/compiler/cmm/Hoopl/Graph.hs b/compiler/cmm/Hoopl/Graph.hs
--- a/compiler/cmm/Hoopl/Graph.hs
+++ b/compiler/cmm/Hoopl/Graph.hs
@@ -1,4 +1,5 @@
 {-# LANGUAGE BangPatterns #-}
+{-# LANGUAGE DataKinds #-}
 {-# LANGUAGE FlexibleInstances #-}
 {-# LANGUAGE GADTs #-}
 {-# LANGUAGE RankNTypes #-}
@@ -30,7 +31,7 @@
 type Body n = LabelMap (Block n C C)
 
 -- | @Body@ abstracted over @block@
-type Body' block (n :: * -> * -> *) = LabelMap (block n C C)
+type Body' block (n :: Extensibility -> Extensibility -> *) = LabelMap (block n C C)
 
 -------------------------------
 -- | Gives access to the anchor points for
@@ -75,7 +76,7 @@
 -- | @Graph'@ is abstracted over the block type, so that we can build
 -- graphs of annotated blocks for example (Compiler.Hoopl.Dataflow
 -- needs this).
-data Graph' block (n :: * -> * -> *) e x where
+data Graph' block (n :: Extensibility -> Extensibility -> *) e x where
   GNil  :: Graph' block n O O
   GUnit :: block n O O -> Graph' block n O O
   GMany :: MaybeO e (block n O C)
diff --git a/compiler/nativeGen/BlockLayout.hs b/compiler/nativeGen/BlockLayout.hs
--- a/compiler/nativeGen/BlockLayout.hs
+++ b/compiler/nativeGen/BlockLayout.hs
@@ -2,7 +2,10 @@
 -- Copyright (c) 2018 Andreas Klebinger
 --
 
-{-# LANGUAGE TypeFamilies, ScopedTypeVariables, CPP #-}
+{-# LANGUAGE CPP #-}
+{-# LANGUAGE DataKinds #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE TypeFamilies #-}
 
 module BlockLayout
     ( sequenceTop )
@@ -512,7 +515,7 @@
 
 
 -- We make the CFG a Hoopl Graph, so we can reuse revPostOrder.
-newtype BlockNode e x = BN (BlockId,[BlockId])
+newtype BlockNode (e :: Extensibility) (x :: Extensibility) = BN (BlockId,[BlockId])
 instance NonLocal (BlockNode) where
   entryLabel (BN (lbl,_))   = lbl
   successors (BN (_,succs)) = succs
diff --git a/compiler/typecheck/TcTypeable.hs b/compiler/typecheck/TcTypeable.hs
--- a/compiler/typecheck/TcTypeable.hs
+++ b/compiler/typecheck/TcTypeable.hs
@@ -148,7 +148,9 @@
 -- See Note [Grand plan for Typeable] in TcTypeable.
 mkTypeableBinds :: TcM TcGblEnv
 mkTypeableBinds
-  = do { -- Create a binding for $trModule.
+  = do { dflags <- getDynFlags
+       ; if gopt Opt_NoTypeableBinds dflags then getGblEnv else do
+       { -- Create a binding for $trModule.
          -- Do this before processing any data type declarations,
          -- which need tcg_tr_module to be initialised
        ; tcg_env <- mkModIdBindings
@@ -166,7 +168,7 @@
        ; traceTc "mkTypeableBinds" (ppr tycons)
        ; this_mod_todos <- todoForTyCons mod mod_id tycons
        ; mkTypeRepTodoBinds (this_mod_todos : prim_todos)
-       } }
+       } } }
   where
     needs_typeable_binds tc
       | tc `elem` [runtimeRepTyCon, vecCountTyCon, vecElemTyCon]
diff --git a/ghc-lib.cabal b/ghc-lib.cabal
--- a/ghc-lib.cabal
+++ b/ghc-lib.cabal
@@ -1,7 +1,7 @@
 cabal-version: >=1.22
 build-type: Simple
 name: ghc-lib
-version: 0.20190903
+version: 0.20190909
 license: BSD3
 license-file: LICENSE
 category: Development
@@ -48,7 +48,7 @@
     compiler/nativeGen/*.h
     compiler/utils/*.h
     compiler/*.h
-tested-with: GHC==8.6.3, GHC==8.4.3
+tested-with: GHC==8.8.1, GHC==8.6.5, GHC==8.4.3
 source-repository head
     type: git
     location: git@github.com:digital-asset/ghc-lib.git
@@ -85,7 +85,7 @@
         transformers == 0.5.*,
         process >= 1 && < 1.7,
         hpc == 0.6.*,
-        ghc-lib-parser == 0.20190903
+        ghc-lib-parser == 0.20190909
     build-tools: alex >= 3.1, happy >= 1.19.4
     other-extensions:
         BangPatterns
diff --git a/ghc-lib/generated/GHCConstantsHaskellType.hs b/ghc-lib/generated/GHCConstantsHaskellType.hs
--- a/ghc-lib/generated/GHCConstantsHaskellType.hs
+++ b/ghc-lib/generated/GHCConstantsHaskellType.hs
@@ -1,134 +1,133 @@
 data PlatformConstants = PlatformConstants {
-    pc_platformConstants :: ()
-    , pc_CONTROL_GROUP_CONST_291 :: Int
-    , pc_STD_HDR_SIZE :: Int
-    , pc_PROF_HDR_SIZE :: Int
-    , pc_BLOCK_SIZE :: Int
-    , pc_BLOCKS_PER_MBLOCK :: Int
-    , pc_TICKY_BIN_COUNT :: Int
-    , pc_OFFSET_StgRegTable_rR1 :: Int
-    , pc_OFFSET_StgRegTable_rR2 :: Int
-    , pc_OFFSET_StgRegTable_rR3 :: Int
-    , pc_OFFSET_StgRegTable_rR4 :: Int
-    , pc_OFFSET_StgRegTable_rR5 :: Int
-    , pc_OFFSET_StgRegTable_rR6 :: Int
-    , pc_OFFSET_StgRegTable_rR7 :: Int
-    , pc_OFFSET_StgRegTable_rR8 :: Int
-    , pc_OFFSET_StgRegTable_rR9 :: Int
-    , pc_OFFSET_StgRegTable_rR10 :: Int
-    , pc_OFFSET_StgRegTable_rF1 :: Int
-    , pc_OFFSET_StgRegTable_rF2 :: Int
-    , pc_OFFSET_StgRegTable_rF3 :: Int
-    , pc_OFFSET_StgRegTable_rF4 :: Int
-    , pc_OFFSET_StgRegTable_rF5 :: Int
-    , pc_OFFSET_StgRegTable_rF6 :: Int
-    , pc_OFFSET_StgRegTable_rD1 :: Int
-    , pc_OFFSET_StgRegTable_rD2 :: Int
-    , pc_OFFSET_StgRegTable_rD3 :: Int
-    , pc_OFFSET_StgRegTable_rD4 :: Int
-    , pc_OFFSET_StgRegTable_rD5 :: Int
-    , pc_OFFSET_StgRegTable_rD6 :: Int
-    , pc_OFFSET_StgRegTable_rXMM1 :: Int
-    , pc_OFFSET_StgRegTable_rXMM2 :: Int
-    , pc_OFFSET_StgRegTable_rXMM3 :: Int
-    , pc_OFFSET_StgRegTable_rXMM4 :: Int
-    , pc_OFFSET_StgRegTable_rXMM5 :: Int
-    , pc_OFFSET_StgRegTable_rXMM6 :: Int
-    , pc_OFFSET_StgRegTable_rYMM1 :: Int
-    , pc_OFFSET_StgRegTable_rYMM2 :: Int
-    , pc_OFFSET_StgRegTable_rYMM3 :: Int
-    , pc_OFFSET_StgRegTable_rYMM4 :: Int
-    , pc_OFFSET_StgRegTable_rYMM5 :: Int
-    , pc_OFFSET_StgRegTable_rYMM6 :: Int
-    , pc_OFFSET_StgRegTable_rZMM1 :: Int
-    , pc_OFFSET_StgRegTable_rZMM2 :: Int
-    , pc_OFFSET_StgRegTable_rZMM3 :: Int
-    , pc_OFFSET_StgRegTable_rZMM4 :: Int
-    , pc_OFFSET_StgRegTable_rZMM5 :: Int
-    , pc_OFFSET_StgRegTable_rZMM6 :: Int
-    , pc_OFFSET_StgRegTable_rL1 :: Int
-    , pc_OFFSET_StgRegTable_rSp :: Int
-    , pc_OFFSET_StgRegTable_rSpLim :: Int
-    , pc_OFFSET_StgRegTable_rHp :: Int
-    , pc_OFFSET_StgRegTable_rHpLim :: Int
-    , pc_OFFSET_StgRegTable_rCCCS :: Int
-    , pc_OFFSET_StgRegTable_rCurrentTSO :: Int
-    , pc_OFFSET_StgRegTable_rCurrentNursery :: Int
-    , pc_OFFSET_StgRegTable_rHpAlloc :: Int
-    , pc_OFFSET_stgEagerBlackholeInfo :: Int
-    , pc_OFFSET_stgGCEnter1 :: Int
-    , pc_OFFSET_stgGCFun :: Int
-    , pc_OFFSET_Capability_r :: Int
-    , pc_OFFSET_bdescr_start :: Int
-    , pc_OFFSET_bdescr_free :: Int
-    , pc_OFFSET_bdescr_blocks :: Int
-    , pc_OFFSET_bdescr_flags :: Int
-    , pc_SIZEOF_CostCentreStack :: Int
-    , pc_OFFSET_CostCentreStack_mem_alloc :: Int
-    , pc_REP_CostCentreStack_mem_alloc :: Int
-    , pc_OFFSET_CostCentreStack_scc_count :: Int
-    , pc_REP_CostCentreStack_scc_count :: Int
-    , pc_OFFSET_StgHeader_ccs :: Int
-    , pc_OFFSET_StgHeader_ldvw :: Int
-    , pc_SIZEOF_StgSMPThunkHeader :: Int
-    , pc_OFFSET_StgEntCounter_allocs :: Int
-    , pc_REP_StgEntCounter_allocs :: Int
-    , pc_OFFSET_StgEntCounter_allocd :: Int
-    , pc_REP_StgEntCounter_allocd :: Int
-    , pc_OFFSET_StgEntCounter_registeredp :: Int
-    , pc_OFFSET_StgEntCounter_link :: Int
-    , pc_OFFSET_StgEntCounter_entry_count :: Int
-    , pc_SIZEOF_StgUpdateFrame_NoHdr :: Int
-    , pc_SIZEOF_StgMutArrPtrs_NoHdr :: Int
-    , pc_OFFSET_StgMutArrPtrs_ptrs :: Int
-    , pc_OFFSET_StgMutArrPtrs_size :: Int
-    , pc_SIZEOF_StgSmallMutArrPtrs_NoHdr :: Int
-    , pc_OFFSET_StgSmallMutArrPtrs_ptrs :: Int
-    , pc_SIZEOF_StgArrBytes_NoHdr :: Int
-    , pc_OFFSET_StgArrBytes_bytes :: Int
-    , pc_OFFSET_StgTSO_alloc_limit :: Int
-    , pc_OFFSET_StgTSO_cccs :: Int
-    , pc_OFFSET_StgTSO_stackobj :: Int
-    , pc_OFFSET_StgStack_sp :: Int
-    , pc_OFFSET_StgStack_stack :: Int
-    , pc_OFFSET_StgUpdateFrame_updatee :: Int
-    , pc_OFFSET_StgFunInfoExtraFwd_arity :: Int
-    , pc_REP_StgFunInfoExtraFwd_arity :: Int
-    , pc_SIZEOF_StgFunInfoExtraRev :: Int
-    , pc_OFFSET_StgFunInfoExtraRev_arity :: Int
-    , pc_REP_StgFunInfoExtraRev_arity :: Int
-    , pc_MAX_SPEC_SELECTEE_SIZE :: Int
-    , pc_MAX_SPEC_AP_SIZE :: Int
-    , pc_MIN_PAYLOAD_SIZE :: Int
-    , pc_MIN_INTLIKE :: Int
-    , pc_MAX_INTLIKE :: Int
-    , pc_MIN_CHARLIKE :: Int
-    , pc_MAX_CHARLIKE :: Int
-    , pc_MUT_ARR_PTRS_CARD_BITS :: Int
-    , pc_MAX_Vanilla_REG :: Int
-    , pc_MAX_Float_REG :: Int
-    , pc_MAX_Double_REG :: Int
-    , pc_MAX_Long_REG :: Int
-    , pc_MAX_XMM_REG :: Int
-    , pc_MAX_Real_Vanilla_REG :: Int
-    , pc_MAX_Real_Float_REG :: Int
-    , pc_MAX_Real_Double_REG :: Int
-    , pc_MAX_Real_XMM_REG :: Int
-    , pc_MAX_Real_Long_REG :: Int
-    , pc_RESERVED_C_STACK_BYTES :: Int
-    , pc_RESERVED_STACK_WORDS :: Int
-    , pc_AP_STACK_SPLIM :: Int
-    , pc_WORD_SIZE :: Int
-    , pc_DOUBLE_SIZE :: Int
-    , pc_CINT_SIZE :: Int
-    , pc_CLONG_SIZE :: Int
-    , pc_CLONG_LONG_SIZE :: Int
-    , pc_BITMAP_BITS_SHIFT :: Int
-    , pc_TAG_BITS :: Int
-    , pc_WORDS_BIGENDIAN :: Bool
-    , pc_DYNAMIC_BY_DEFAULT :: Bool
-    , pc_LDV_SHIFT :: Int
-    , pc_ILDV_CREATE_MASK :: Integer
-    , pc_ILDV_STATE_CREATE :: Integer
-    , pc_ILDV_STATE_USE :: Integer
+      pc_CONTROL_GROUP_CONST_291 :: Int,
+      pc_STD_HDR_SIZE :: Int,
+      pc_PROF_HDR_SIZE :: Int,
+      pc_BLOCK_SIZE :: Int,
+      pc_BLOCKS_PER_MBLOCK :: Int,
+      pc_TICKY_BIN_COUNT :: Int,
+      pc_OFFSET_StgRegTable_rR1 :: Int,
+      pc_OFFSET_StgRegTable_rR2 :: Int,
+      pc_OFFSET_StgRegTable_rR3 :: Int,
+      pc_OFFSET_StgRegTable_rR4 :: Int,
+      pc_OFFSET_StgRegTable_rR5 :: Int,
+      pc_OFFSET_StgRegTable_rR6 :: Int,
+      pc_OFFSET_StgRegTable_rR7 :: Int,
+      pc_OFFSET_StgRegTable_rR8 :: Int,
+      pc_OFFSET_StgRegTable_rR9 :: Int,
+      pc_OFFSET_StgRegTable_rR10 :: Int,
+      pc_OFFSET_StgRegTable_rF1 :: Int,
+      pc_OFFSET_StgRegTable_rF2 :: Int,
+      pc_OFFSET_StgRegTable_rF3 :: Int,
+      pc_OFFSET_StgRegTable_rF4 :: Int,
+      pc_OFFSET_StgRegTable_rF5 :: Int,
+      pc_OFFSET_StgRegTable_rF6 :: Int,
+      pc_OFFSET_StgRegTable_rD1 :: Int,
+      pc_OFFSET_StgRegTable_rD2 :: Int,
+      pc_OFFSET_StgRegTable_rD3 :: Int,
+      pc_OFFSET_StgRegTable_rD4 :: Int,
+      pc_OFFSET_StgRegTable_rD5 :: Int,
+      pc_OFFSET_StgRegTable_rD6 :: Int,
+      pc_OFFSET_StgRegTable_rXMM1 :: Int,
+      pc_OFFSET_StgRegTable_rXMM2 :: Int,
+      pc_OFFSET_StgRegTable_rXMM3 :: Int,
+      pc_OFFSET_StgRegTable_rXMM4 :: Int,
+      pc_OFFSET_StgRegTable_rXMM5 :: Int,
+      pc_OFFSET_StgRegTable_rXMM6 :: Int,
+      pc_OFFSET_StgRegTable_rYMM1 :: Int,
+      pc_OFFSET_StgRegTable_rYMM2 :: Int,
+      pc_OFFSET_StgRegTable_rYMM3 :: Int,
+      pc_OFFSET_StgRegTable_rYMM4 :: Int,
+      pc_OFFSET_StgRegTable_rYMM5 :: Int,
+      pc_OFFSET_StgRegTable_rYMM6 :: Int,
+      pc_OFFSET_StgRegTable_rZMM1 :: Int,
+      pc_OFFSET_StgRegTable_rZMM2 :: Int,
+      pc_OFFSET_StgRegTable_rZMM3 :: Int,
+      pc_OFFSET_StgRegTable_rZMM4 :: Int,
+      pc_OFFSET_StgRegTable_rZMM5 :: Int,
+      pc_OFFSET_StgRegTable_rZMM6 :: Int,
+      pc_OFFSET_StgRegTable_rL1 :: Int,
+      pc_OFFSET_StgRegTable_rSp :: Int,
+      pc_OFFSET_StgRegTable_rSpLim :: Int,
+      pc_OFFSET_StgRegTable_rHp :: Int,
+      pc_OFFSET_StgRegTable_rHpLim :: Int,
+      pc_OFFSET_StgRegTable_rCCCS :: Int,
+      pc_OFFSET_StgRegTable_rCurrentTSO :: Int,
+      pc_OFFSET_StgRegTable_rCurrentNursery :: Int,
+      pc_OFFSET_StgRegTable_rHpAlloc :: Int,
+      pc_OFFSET_stgEagerBlackholeInfo :: Int,
+      pc_OFFSET_stgGCEnter1 :: Int,
+      pc_OFFSET_stgGCFun :: Int,
+      pc_OFFSET_Capability_r :: Int,
+      pc_OFFSET_bdescr_start :: Int,
+      pc_OFFSET_bdescr_free :: Int,
+      pc_OFFSET_bdescr_blocks :: Int,
+      pc_OFFSET_bdescr_flags :: Int,
+      pc_SIZEOF_CostCentreStack :: Int,
+      pc_OFFSET_CostCentreStack_mem_alloc :: Int,
+      pc_REP_CostCentreStack_mem_alloc :: Int,
+      pc_OFFSET_CostCentreStack_scc_count :: Int,
+      pc_REP_CostCentreStack_scc_count :: Int,
+      pc_OFFSET_StgHeader_ccs :: Int,
+      pc_OFFSET_StgHeader_ldvw :: Int,
+      pc_SIZEOF_StgSMPThunkHeader :: Int,
+      pc_OFFSET_StgEntCounter_allocs :: Int,
+      pc_REP_StgEntCounter_allocs :: Int,
+      pc_OFFSET_StgEntCounter_allocd :: Int,
+      pc_REP_StgEntCounter_allocd :: Int,
+      pc_OFFSET_StgEntCounter_registeredp :: Int,
+      pc_OFFSET_StgEntCounter_link :: Int,
+      pc_OFFSET_StgEntCounter_entry_count :: Int,
+      pc_SIZEOF_StgUpdateFrame_NoHdr :: Int,
+      pc_SIZEOF_StgMutArrPtrs_NoHdr :: Int,
+      pc_OFFSET_StgMutArrPtrs_ptrs :: Int,
+      pc_OFFSET_StgMutArrPtrs_size :: Int,
+      pc_SIZEOF_StgSmallMutArrPtrs_NoHdr :: Int,
+      pc_OFFSET_StgSmallMutArrPtrs_ptrs :: Int,
+      pc_SIZEOF_StgArrBytes_NoHdr :: Int,
+      pc_OFFSET_StgArrBytes_bytes :: Int,
+      pc_OFFSET_StgTSO_alloc_limit :: Int,
+      pc_OFFSET_StgTSO_cccs :: Int,
+      pc_OFFSET_StgTSO_stackobj :: Int,
+      pc_OFFSET_StgStack_sp :: Int,
+      pc_OFFSET_StgStack_stack :: Int,
+      pc_OFFSET_StgUpdateFrame_updatee :: Int,
+      pc_OFFSET_StgFunInfoExtraFwd_arity :: Int,
+      pc_REP_StgFunInfoExtraFwd_arity :: Int,
+      pc_SIZEOF_StgFunInfoExtraRev :: Int,
+      pc_OFFSET_StgFunInfoExtraRev_arity :: Int,
+      pc_REP_StgFunInfoExtraRev_arity :: Int,
+      pc_MAX_SPEC_SELECTEE_SIZE :: Int,
+      pc_MAX_SPEC_AP_SIZE :: Int,
+      pc_MIN_PAYLOAD_SIZE :: Int,
+      pc_MIN_INTLIKE :: Int,
+      pc_MAX_INTLIKE :: Int,
+      pc_MIN_CHARLIKE :: Int,
+      pc_MAX_CHARLIKE :: Int,
+      pc_MUT_ARR_PTRS_CARD_BITS :: Int,
+      pc_MAX_Vanilla_REG :: Int,
+      pc_MAX_Float_REG :: Int,
+      pc_MAX_Double_REG :: Int,
+      pc_MAX_Long_REG :: Int,
+      pc_MAX_XMM_REG :: Int,
+      pc_MAX_Real_Vanilla_REG :: Int,
+      pc_MAX_Real_Float_REG :: Int,
+      pc_MAX_Real_Double_REG :: Int,
+      pc_MAX_Real_XMM_REG :: Int,
+      pc_MAX_Real_Long_REG :: Int,
+      pc_RESERVED_C_STACK_BYTES :: Int,
+      pc_RESERVED_STACK_WORDS :: Int,
+      pc_AP_STACK_SPLIM :: Int,
+      pc_WORD_SIZE :: Int,
+      pc_DOUBLE_SIZE :: Int,
+      pc_CINT_SIZE :: Int,
+      pc_CLONG_SIZE :: Int,
+      pc_CLONG_LONG_SIZE :: Int,
+      pc_BITMAP_BITS_SHIFT :: Int,
+      pc_TAG_BITS :: Int,
+      pc_WORDS_BIGENDIAN :: Bool,
+      pc_DYNAMIC_BY_DEFAULT :: Bool,
+      pc_LDV_SHIFT :: Int,
+      pc_ILDV_CREATE_MASK :: Integer,
+      pc_ILDV_STATE_CREATE :: Integer,
+      pc_ILDV_STATE_USE :: Integer
   } deriving Read
diff --git a/ghc-lib/generated/ghcversion.h b/ghc-lib/generated/ghcversion.h
--- a/ghc-lib/generated/ghcversion.h
+++ b/ghc-lib/generated/ghcversion.h
@@ -6,7 +6,7 @@
 #endif
 
 #define __GLASGOW_HASKELL_PATCHLEVEL1__ 0
-#define __GLASGOW_HASKELL_PATCHLEVEL2__ 20190902
+#define __GLASGOW_HASKELL_PATCHLEVEL2__ 20190909
 
 #define MIN_VERSION_GLASGOW_HASKELL(ma,mi,pl1,pl2) (\
    ((ma)*100+(mi)) <  __GLASGOW_HASKELL__ || \
diff --git a/ghc-lib/stage1/lib/platformConstants b/ghc-lib/stage1/lib/platformConstants
--- a/ghc-lib/stage1/lib/platformConstants
+++ b/ghc-lib/stage1/lib/platformConstants
@@ -1,134 +1,133 @@
 PlatformConstants {
-    pc_platformConstants = ()
-    , pc_CONTROL_GROUP_CONST_291 = 291
-    , pc_STD_HDR_SIZE = 1
-    , pc_PROF_HDR_SIZE = 2
-    , pc_BLOCK_SIZE = 4096
-    , pc_BLOCKS_PER_MBLOCK = 252
-    , pc_TICKY_BIN_COUNT = 9
-    , pc_OFFSET_StgRegTable_rR1 = 0
-    , pc_OFFSET_StgRegTable_rR2 = 8
-    , pc_OFFSET_StgRegTable_rR3 = 16
-    , pc_OFFSET_StgRegTable_rR4 = 24
-    , pc_OFFSET_StgRegTable_rR5 = 32
-    , pc_OFFSET_StgRegTable_rR6 = 40
-    , pc_OFFSET_StgRegTable_rR7 = 48
-    , pc_OFFSET_StgRegTable_rR8 = 56
-    , pc_OFFSET_StgRegTable_rR9 = 64
-    , pc_OFFSET_StgRegTable_rR10 = 72
-    , pc_OFFSET_StgRegTable_rF1 = 80
-    , pc_OFFSET_StgRegTable_rF2 = 84
-    , pc_OFFSET_StgRegTable_rF3 = 88
-    , pc_OFFSET_StgRegTable_rF4 = 92
-    , pc_OFFSET_StgRegTable_rF5 = 96
-    , pc_OFFSET_StgRegTable_rF6 = 100
-    , pc_OFFSET_StgRegTable_rD1 = 104
-    , pc_OFFSET_StgRegTable_rD2 = 112
-    , pc_OFFSET_StgRegTable_rD3 = 120
-    , pc_OFFSET_StgRegTable_rD4 = 128
-    , pc_OFFSET_StgRegTable_rD5 = 136
-    , pc_OFFSET_StgRegTable_rD6 = 144
-    , pc_OFFSET_StgRegTable_rXMM1 = 152
-    , pc_OFFSET_StgRegTable_rXMM2 = 168
-    , pc_OFFSET_StgRegTable_rXMM3 = 184
-    , pc_OFFSET_StgRegTable_rXMM4 = 200
-    , pc_OFFSET_StgRegTable_rXMM5 = 216
-    , pc_OFFSET_StgRegTable_rXMM6 = 232
-    , pc_OFFSET_StgRegTable_rYMM1 = 248
-    , pc_OFFSET_StgRegTable_rYMM2 = 280
-    , pc_OFFSET_StgRegTable_rYMM3 = 312
-    , pc_OFFSET_StgRegTable_rYMM4 = 344
-    , pc_OFFSET_StgRegTable_rYMM5 = 376
-    , pc_OFFSET_StgRegTable_rYMM6 = 408
-    , pc_OFFSET_StgRegTable_rZMM1 = 440
-    , pc_OFFSET_StgRegTable_rZMM2 = 504
-    , pc_OFFSET_StgRegTable_rZMM3 = 568
-    , pc_OFFSET_StgRegTable_rZMM4 = 632
-    , pc_OFFSET_StgRegTable_rZMM5 = 696
-    , pc_OFFSET_StgRegTable_rZMM6 = 760
-    , pc_OFFSET_StgRegTable_rL1 = 824
-    , pc_OFFSET_StgRegTable_rSp = 832
-    , pc_OFFSET_StgRegTable_rSpLim = 840
-    , pc_OFFSET_StgRegTable_rHp = 848
-    , pc_OFFSET_StgRegTable_rHpLim = 856
-    , pc_OFFSET_StgRegTable_rCCCS = 864
-    , pc_OFFSET_StgRegTable_rCurrentTSO = 872
-    , pc_OFFSET_StgRegTable_rCurrentNursery = 888
-    , pc_OFFSET_StgRegTable_rHpAlloc = 904
-    , pc_OFFSET_stgEagerBlackholeInfo = -24
-    , pc_OFFSET_stgGCEnter1 = -16
-    , pc_OFFSET_stgGCFun = -8
-    , pc_OFFSET_Capability_r = 24
-    , pc_OFFSET_bdescr_start = 0
-    , pc_OFFSET_bdescr_free = 8
-    , pc_OFFSET_bdescr_blocks = 48
-    , pc_OFFSET_bdescr_flags = 46
-    , pc_SIZEOF_CostCentreStack = 96
-    , pc_OFFSET_CostCentreStack_mem_alloc = 72
-    , pc_REP_CostCentreStack_mem_alloc = 8
-    , pc_OFFSET_CostCentreStack_scc_count = 48
-    , pc_REP_CostCentreStack_scc_count = 8
-    , pc_OFFSET_StgHeader_ccs = 8
-    , pc_OFFSET_StgHeader_ldvw = 16
-    , pc_SIZEOF_StgSMPThunkHeader = 8
-    , pc_OFFSET_StgEntCounter_allocs = 48
-    , pc_REP_StgEntCounter_allocs = 8
-    , pc_OFFSET_StgEntCounter_allocd = 16
-    , pc_REP_StgEntCounter_allocd = 8
-    , pc_OFFSET_StgEntCounter_registeredp = 0
-    , pc_OFFSET_StgEntCounter_link = 56
-    , pc_OFFSET_StgEntCounter_entry_count = 40
-    , pc_SIZEOF_StgUpdateFrame_NoHdr = 8
-    , pc_SIZEOF_StgMutArrPtrs_NoHdr = 16
-    , pc_OFFSET_StgMutArrPtrs_ptrs = 0
-    , pc_OFFSET_StgMutArrPtrs_size = 8
-    , pc_SIZEOF_StgSmallMutArrPtrs_NoHdr = 8
-    , pc_OFFSET_StgSmallMutArrPtrs_ptrs = 0
-    , pc_SIZEOF_StgArrBytes_NoHdr = 8
-    , pc_OFFSET_StgArrBytes_bytes = 0
-    , pc_OFFSET_StgTSO_alloc_limit = 96
-    , pc_OFFSET_StgTSO_cccs = 112
-    , pc_OFFSET_StgTSO_stackobj = 16
-    , pc_OFFSET_StgStack_sp = 8
-    , pc_OFFSET_StgStack_stack = 16
-    , pc_OFFSET_StgUpdateFrame_updatee = 0
-    , pc_OFFSET_StgFunInfoExtraFwd_arity = 4
-    , pc_REP_StgFunInfoExtraFwd_arity = 4
-    , pc_SIZEOF_StgFunInfoExtraRev = 24
-    , pc_OFFSET_StgFunInfoExtraRev_arity = 20
-    , pc_REP_StgFunInfoExtraRev_arity = 4
-    , pc_MAX_SPEC_SELECTEE_SIZE = 15
-    , pc_MAX_SPEC_AP_SIZE = 7
-    , pc_MIN_PAYLOAD_SIZE = 1
-    , pc_MIN_INTLIKE = -16
-    , pc_MAX_INTLIKE = 255
-    , pc_MIN_CHARLIKE = 0
-    , pc_MAX_CHARLIKE = 255
-    , pc_MUT_ARR_PTRS_CARD_BITS = 7
-    , pc_MAX_Vanilla_REG = 10
-    , pc_MAX_Float_REG = 6
-    , pc_MAX_Double_REG = 6
-    , pc_MAX_Long_REG = 1
-    , pc_MAX_XMM_REG = 6
-    , pc_MAX_Real_Vanilla_REG = 6
-    , pc_MAX_Real_Float_REG = 6
-    , pc_MAX_Real_Double_REG = 6
-    , pc_MAX_Real_XMM_REG = 6
-    , pc_MAX_Real_Long_REG = 0
-    , pc_RESERVED_C_STACK_BYTES = 16384
-    , pc_RESERVED_STACK_WORDS = 21
-    , pc_AP_STACK_SPLIM = 1024
-    , pc_WORD_SIZE = 8
-    , pc_DOUBLE_SIZE = 8
-    , pc_CINT_SIZE = 4
-    , pc_CLONG_SIZE = 8
-    , pc_CLONG_LONG_SIZE = 8
-    , pc_BITMAP_BITS_SHIFT = 6
-    , pc_TAG_BITS = 3
-    , pc_WORDS_BIGENDIAN = False
-    , pc_DYNAMIC_BY_DEFAULT = False
-    , pc_LDV_SHIFT = 30
-    , pc_ILDV_CREATE_MASK = 1152921503533105152
-    , pc_ILDV_STATE_CREATE = 0
-    , pc_ILDV_STATE_USE = 1152921504606846976
+      pc_CONTROL_GROUP_CONST_291 = 291,
+      pc_STD_HDR_SIZE = 1,
+      pc_PROF_HDR_SIZE = 2,
+      pc_BLOCK_SIZE = 4096,
+      pc_BLOCKS_PER_MBLOCK = 252,
+      pc_TICKY_BIN_COUNT = 9,
+      pc_OFFSET_StgRegTable_rR1 = 0,
+      pc_OFFSET_StgRegTable_rR2 = 8,
+      pc_OFFSET_StgRegTable_rR3 = 16,
+      pc_OFFSET_StgRegTable_rR4 = 24,
+      pc_OFFSET_StgRegTable_rR5 = 32,
+      pc_OFFSET_StgRegTable_rR6 = 40,
+      pc_OFFSET_StgRegTable_rR7 = 48,
+      pc_OFFSET_StgRegTable_rR8 = 56,
+      pc_OFFSET_StgRegTable_rR9 = 64,
+      pc_OFFSET_StgRegTable_rR10 = 72,
+      pc_OFFSET_StgRegTable_rF1 = 80,
+      pc_OFFSET_StgRegTable_rF2 = 84,
+      pc_OFFSET_StgRegTable_rF3 = 88,
+      pc_OFFSET_StgRegTable_rF4 = 92,
+      pc_OFFSET_StgRegTable_rF5 = 96,
+      pc_OFFSET_StgRegTable_rF6 = 100,
+      pc_OFFSET_StgRegTable_rD1 = 104,
+      pc_OFFSET_StgRegTable_rD2 = 112,
+      pc_OFFSET_StgRegTable_rD3 = 120,
+      pc_OFFSET_StgRegTable_rD4 = 128,
+      pc_OFFSET_StgRegTable_rD5 = 136,
+      pc_OFFSET_StgRegTable_rD6 = 144,
+      pc_OFFSET_StgRegTable_rXMM1 = 152,
+      pc_OFFSET_StgRegTable_rXMM2 = 168,
+      pc_OFFSET_StgRegTable_rXMM3 = 184,
+      pc_OFFSET_StgRegTable_rXMM4 = 200,
+      pc_OFFSET_StgRegTable_rXMM5 = 216,
+      pc_OFFSET_StgRegTable_rXMM6 = 232,
+      pc_OFFSET_StgRegTable_rYMM1 = 248,
+      pc_OFFSET_StgRegTable_rYMM2 = 280,
+      pc_OFFSET_StgRegTable_rYMM3 = 312,
+      pc_OFFSET_StgRegTable_rYMM4 = 344,
+      pc_OFFSET_StgRegTable_rYMM5 = 376,
+      pc_OFFSET_StgRegTable_rYMM6 = 408,
+      pc_OFFSET_StgRegTable_rZMM1 = 440,
+      pc_OFFSET_StgRegTable_rZMM2 = 504,
+      pc_OFFSET_StgRegTable_rZMM3 = 568,
+      pc_OFFSET_StgRegTable_rZMM4 = 632,
+      pc_OFFSET_StgRegTable_rZMM5 = 696,
+      pc_OFFSET_StgRegTable_rZMM6 = 760,
+      pc_OFFSET_StgRegTable_rL1 = 824,
+      pc_OFFSET_StgRegTable_rSp = 832,
+      pc_OFFSET_StgRegTable_rSpLim = 840,
+      pc_OFFSET_StgRegTable_rHp = 848,
+      pc_OFFSET_StgRegTable_rHpLim = 856,
+      pc_OFFSET_StgRegTable_rCCCS = 864,
+      pc_OFFSET_StgRegTable_rCurrentTSO = 872,
+      pc_OFFSET_StgRegTable_rCurrentNursery = 888,
+      pc_OFFSET_StgRegTable_rHpAlloc = 904,
+      pc_OFFSET_stgEagerBlackholeInfo = -24,
+      pc_OFFSET_stgGCEnter1 = -16,
+      pc_OFFSET_stgGCFun = -8,
+      pc_OFFSET_Capability_r = 24,
+      pc_OFFSET_bdescr_start = 0,
+      pc_OFFSET_bdescr_free = 8,
+      pc_OFFSET_bdescr_blocks = 48,
+      pc_OFFSET_bdescr_flags = 46,
+      pc_SIZEOF_CostCentreStack = 96,
+      pc_OFFSET_CostCentreStack_mem_alloc = 72,
+      pc_REP_CostCentreStack_mem_alloc = 8,
+      pc_OFFSET_CostCentreStack_scc_count = 48,
+      pc_REP_CostCentreStack_scc_count = 8,
+      pc_OFFSET_StgHeader_ccs = 8,
+      pc_OFFSET_StgHeader_ldvw = 16,
+      pc_SIZEOF_StgSMPThunkHeader = 8,
+      pc_OFFSET_StgEntCounter_allocs = 48,
+      pc_REP_StgEntCounter_allocs = 8,
+      pc_OFFSET_StgEntCounter_allocd = 16,
+      pc_REP_StgEntCounter_allocd = 8,
+      pc_OFFSET_StgEntCounter_registeredp = 0,
+      pc_OFFSET_StgEntCounter_link = 56,
+      pc_OFFSET_StgEntCounter_entry_count = 40,
+      pc_SIZEOF_StgUpdateFrame_NoHdr = 8,
+      pc_SIZEOF_StgMutArrPtrs_NoHdr = 16,
+      pc_OFFSET_StgMutArrPtrs_ptrs = 0,
+      pc_OFFSET_StgMutArrPtrs_size = 8,
+      pc_SIZEOF_StgSmallMutArrPtrs_NoHdr = 8,
+      pc_OFFSET_StgSmallMutArrPtrs_ptrs = 0,
+      pc_SIZEOF_StgArrBytes_NoHdr = 8,
+      pc_OFFSET_StgArrBytes_bytes = 0,
+      pc_OFFSET_StgTSO_alloc_limit = 96,
+      pc_OFFSET_StgTSO_cccs = 112,
+      pc_OFFSET_StgTSO_stackobj = 16,
+      pc_OFFSET_StgStack_sp = 8,
+      pc_OFFSET_StgStack_stack = 16,
+      pc_OFFSET_StgUpdateFrame_updatee = 0,
+      pc_OFFSET_StgFunInfoExtraFwd_arity = 4,
+      pc_REP_StgFunInfoExtraFwd_arity = 4,
+      pc_SIZEOF_StgFunInfoExtraRev = 24,
+      pc_OFFSET_StgFunInfoExtraRev_arity = 20,
+      pc_REP_StgFunInfoExtraRev_arity = 4,
+      pc_MAX_SPEC_SELECTEE_SIZE = 15,
+      pc_MAX_SPEC_AP_SIZE = 7,
+      pc_MIN_PAYLOAD_SIZE = 1,
+      pc_MIN_INTLIKE = -16,
+      pc_MAX_INTLIKE = 255,
+      pc_MIN_CHARLIKE = 0,
+      pc_MAX_CHARLIKE = 255,
+      pc_MUT_ARR_PTRS_CARD_BITS = 7,
+      pc_MAX_Vanilla_REG = 10,
+      pc_MAX_Float_REG = 6,
+      pc_MAX_Double_REG = 6,
+      pc_MAX_Long_REG = 1,
+      pc_MAX_XMM_REG = 6,
+      pc_MAX_Real_Vanilla_REG = 6,
+      pc_MAX_Real_Float_REG = 6,
+      pc_MAX_Real_Double_REG = 6,
+      pc_MAX_Real_XMM_REG = 6,
+      pc_MAX_Real_Long_REG = 0,
+      pc_RESERVED_C_STACK_BYTES = 16384,
+      pc_RESERVED_STACK_WORDS = 21,
+      pc_AP_STACK_SPLIM = 1024,
+      pc_WORD_SIZE = 8,
+      pc_DOUBLE_SIZE = 8,
+      pc_CINT_SIZE = 4,
+      pc_CLONG_SIZE = 8,
+      pc_CLONG_LONG_SIZE = 8,
+      pc_BITMAP_BITS_SHIFT = 6,
+      pc_TAG_BITS = 3,
+      pc_WORDS_BIGENDIAN = False,
+      pc_DYNAMIC_BY_DEFAULT = False,
+      pc_LDV_SHIFT = 30,
+      pc_ILDV_CREATE_MASK = 1152921503533105152,
+      pc_ILDV_STATE_CREATE = 0,
+      pc_ILDV_STATE_USE = 1152921504606846976
   }
diff --git a/ghc-lib/stage1/lib/settings b/ghc-lib/stage1/lib/settings
--- a/ghc-lib/stage1/lib/settings
+++ b/ghc-lib/stage1/lib/settings
@@ -26,9 +26,9 @@
 ,("target os", "OSDarwin")
 ,("target arch", "ArchX86_64")
 ,("target word size", "8")
-,("target has GNU nonexec stack", "False")
-,("target has .ident directive", "True")
-,("target has subsections via symbols", "True")
+,("target has GNU nonexec stack", "NO")
+,("target has .ident directive", "YES")
+,("target has subsections via symbols", "YES")
 ,("target has RTS linker", "YES")
 ,("Unregisterised", "NO")
 ,("LLVM target", "x86_64-apple-darwin")
diff --git a/libraries/ghc-boot/GHC/Settings.hs b/libraries/ghc-boot/GHC/Settings.hs
--- a/libraries/ghc-boot/GHC/Settings.hs
+++ b/libraries/ghc-boot/GHC/Settings.hs
@@ -37,9 +37,9 @@
   targetOS <- readSetting "target os"
   targetWordSize <- readSetting "target word size"
   targetUnregisterised <- getBooleanSetting "Unregisterised"
-  targetHasGnuNonexecStack <- readSetting "target has GNU nonexec stack"
-  targetHasIdentDirective <- readSetting "target has .ident directive"
-  targetHasSubsectionsViaSymbols <- readSetting "target has subsections via symbols"
+  targetHasGnuNonexecStack <- getBooleanSetting "target has GNU nonexec stack"
+  targetHasIdentDirective <- getBooleanSetting "target has .ident directive"
+  targetHasSubsectionsViaSymbols <- getBooleanSetting "target has subsections via symbols"
   crossCompiling <- getBooleanSetting "cross compiling"
 
   pure $ Platform
