diff --git a/Control/Concurrent/STM/TBQueue.hs b/Control/Concurrent/STM/TBQueue.hs
--- a/Control/Concurrent/STM/TBQueue.hs
+++ b/Control/Concurrent/STM/TBQueue.hs
@@ -1,3 +1,4 @@
+{-# OPTIONS_GHC -fno-warn-incomplete-uni-patterns #-}
 {-# LANGUAGE CPP                #-}
 {-# LANGUAGE DeriveDataTypeable #-}
 
@@ -130,8 +131,11 @@
       case ys of
         [] -> retry
         _  -> do
-          let (z:zs) = reverse ys -- NB. lazy: we want the transaction to be
-                                  -- short, otherwise it will conflict
+          -- NB. lazy: we want the transaction to be
+          -- short, otherwise it will conflict
+          let ~(z,zs) = case reverse ys of
+                          z':zs' -> (z',zs')
+                          _      -> error "readTBQueue: impossible"
           writeTVar write []
           writeTVar read zs
           return z
diff --git a/Control/Concurrent/STM/TQueue.hs b/Control/Concurrent/STM/TQueue.hs
--- a/Control/Concurrent/STM/TQueue.hs
+++ b/Control/Concurrent/STM/TQueue.hs
@@ -1,4 +1,5 @@
 {-# OPTIONS_GHC -fno-warn-name-shadowing #-}
+{-# OPTIONS_GHC -fno-warn-incomplete-uni-patterns #-}
 {-# LANGUAGE CPP, DeriveDataTypeable #-}
 
 #if __GLASGOW_HASKELL__ >= 701
diff --git a/Control/Monad/STM.hs b/Control/Monad/STM.hs
--- a/Control/Monad/STM.hs
+++ b/Control/Monad/STM.hs
@@ -105,7 +105,8 @@
 -- | A variant of 'throw' that can only be used within the 'STM' monad.
 --
 -- Throwing an exception in @STM@ aborts the transaction and propagates the
--- exception.
+-- exception. (Note: Allocation effects, such as  'newTVar' are not rolled back
+-- when this happens. All other effects are discarded. See <https://gitlab.haskell.org/ghc/ghc/-/issues/18453 ghc#18453.>)
 --
 -- Although 'throwSTM' has a type that is an instance of the type of 'throw', the
 -- two functions are subtly different:
diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,5 +1,11 @@
 # Changelog for [`stm` package](http://hackage.haskell.org/package/stm)
 
+## 2.5.0.2 *Dec 2021*
+
+  * Fix non-exhaustive patterns warning (#49)
+
+  * Document particulars of effect-rollback of `Control.Monad.STM.throwSTM` (#32)
+
 ## 2.5.0.1 *May 2020*
 
   * Optimise implementation of `peekTQueue` and `peekTBQueue` to reduce
diff --git a/stm.cabal b/stm.cabal
--- a/stm.cabal
+++ b/stm.cabal
@@ -1,6 +1,6 @@
 cabal-version:  >=1.10
 name:           stm
-version:        2.5.0.1
+version:        2.5.0.2
 -- don't forget to update changelog.md file!
 
 license:        BSD3
@@ -11,7 +11,7 @@
 synopsis:       Software Transactional Memory
 category:       Concurrency
 build-type:     Simple
-tested-with:    GHC==8.8.*, GHC==8.6.*, GHC==8.4.*, GHC==8.2.*, GHC==8.0.*, GHC==7.10.*, GHC==7.8.*, GHC==7.6.*, GHC==7.4.*, GHC==7.2.*, GHC==7.0.*
+tested-with:    GHC==8.10.*, GHC==8.8.*, GHC==8.6.*, GHC==8.4.*, GHC==8.2.*, GHC==8.0.*, GHC==7.10.*, GHC==7.8.*, GHC==7.6.*, GHC==7.4.*, GHC==7.2.*
 description:
     Software Transactional Memory, or STM, is an abstraction for
     concurrent communication. The main benefits of STM are
@@ -50,7 +50,7 @@
         build-depends: nats (>= 0.1.3 && < 0.3) || (>= 1 && < 1.2)
 
     build-depends:
-        base  >= 4.3 && < 4.15,
+        base  >= 4.3 && < 4.17,
         array >= 0.3 && < 0.6
 
     exposed-modules:
@@ -66,4 +66,4 @@
     other-modules:
         Control.Sequential.STM
 
-    ghc-options: -Wall
+    ghc-options: -Wall -fwarn-incomplete-uni-patterns -fwarn-incomplete-record-updates
diff --git a/testsuite/testsuite.cabal b/testsuite/testsuite.cabal
--- a/testsuite/testsuite.cabal
+++ b/testsuite/testsuite.cabal
@@ -36,7 +36,7 @@
 
   --
   build-depends:
-    , base                   >= 4.3 && < 4.14
+    , base                   >= 4.3 && < 4.17
     , test-framework        ^>= 0.8.2.0
     , test-framework-hunit  ^>= 0.3.0.2
     , HUnit                 ^>= 1.6.0.0
