diff --git a/libraries/base/tests/T16111.hs b/libraries/base/tests/T16111.hs
new file mode 100644
index 0000000000000000000000000000000000000000..241714ea130b11d32ab96979e899a9e5fe87c19d
--- /dev/null
+++ b/libraries/base/tests/T16111.hs
@@ -0,0 +1,13 @@
+module Main (main) where
+
+import Data.Bits
+import Data.Word
+
+main :: IO ()
+main = print $ toInteger (shiftL 1 hm :: Word64)
+            == toInteger (shiftL 1 hm :: Word64)
+
+hm :: Int
+hm = -1
+{-# NOINLINE hm #-}
+
diff --git a/libraries/base/tests/T16111.stderr b/libraries/base/tests/T16111.stderr
new file mode 100644
index 0000000000000000000000000000000000000000..7562f9de58ea53aa345c952705cf047f19455ca7
--- /dev/null
+++ b/libraries/base/tests/T16111.stderr
@@ -0,0 +1,2 @@
+T16111: arithmetic overflow
+
diff --git a/libraries/base/tests/all.T b/libraries/base/tests/all.T
index 9cb9c958fb2e6d90d0cbeef1d5626196f66b64f7..4ef2f07dd28de6686fd21fa35e2cf208a17c551f 100644
--- a/libraries/base/tests/all.T
+++ b/libraries/base/tests/all.T
@@ -233,3 +233,4 @@ test('T10412', normal, compile_and_run, [''])
 test('T13896', normal, compile_and_run, [''])
 test('T13167', fragile_for(16536, ['threaded2']), compile_and_run, [''])
 test('T15349', [exit_code(1), expect_broken_for(15349, 'ghci')], compile_and_run, [''])
+test('T16111', exit_code(1), compile_and_run, [''])