diff --git a/testsuite/tests/ghc-regress/lib/IO/all.T b/testsuite/tests/ghc-regress/lib/IO/all.T
index 79e5c0a04a4e9d564a4ac66dd6bae61b36c114b9..2eea1e4dcd88ce4c39d7959a68206a7df444066c 100644
--- a/testsuite/tests/ghc-regress/lib/IO/all.T
+++ b/testsuite/tests/ghc-regress/lib/IO/all.T
@@ -156,3 +156,5 @@ test('openTempFile001', normal, compile_and_run, [''])
 test('T4113', normal, compile_and_run, [''])
 
 test('T4144', normal, compile_and_run, [''])
+
+test('encodingerror001', normal, compile_and_run, [''])
diff --git a/testsuite/tests/ghc-regress/lib/IO/encodingerror001.hs b/testsuite/tests/ghc-regress/lib/IO/encodingerror001.hs
new file mode 100644
index 0000000000000000000000000000000000000000..327b490adb38d43fc4c4249095bc1f97308d25d5
--- /dev/null
+++ b/testsuite/tests/ghc-regress/lib/IO/encodingerror001.hs
@@ -0,0 +1,27 @@
+import System.IO
+import System.IO.Error
+import Text.Printf
+import Control.Monad
+
+main = do
+  hSetEncoding stdout latin1
+  forM [NoBuffering,
+        LineBuffering,
+        BlockBuffering Nothing,
+        BlockBuffering (Just 3),
+        BlockBuffering (Just 9),
+        BlockBuffering (Just 32)] $ \b -> do
+     hSetBuffering stdout b
+     checkedPutStr "test 1\n"
+     checkedPutStr "Ä›\n" -- nothing gets written
+     checkedPutStr "test 2\n"
+     checkedPutStr "Hέllo\n" -- we should write at least the 'H'
+     checkedPutStr "test 3\n"
+     checkedPutStr "Hello αβγ\n" -- we should write at least the "Hello "
+
+checkedPutStr str = do
+  r <- try $ putStr str
+  case r of
+    Right _ -> return ()
+    Left  e -> printf "Caught %s while trying to write %s\n"
+                  (show e) (show str)
diff --git a/testsuite/tests/ghc-regress/lib/IO/encodingerror001.stdout b/testsuite/tests/ghc-regress/lib/IO/encodingerror001.stdout
new file mode 100644
index 0000000000000000000000000000000000000000..23718da4b2bcfa648c9acd2050ec43ec0505ac53
--- /dev/null
+++ b/testsuite/tests/ghc-regress/lib/IO/encodingerror001.stdout
@@ -0,0 +1,36 @@
+test 1
+Caught <stdout>: hPutChar: invalid argument (character is out of range for this encoding) while trying to write "\283\n"
+test 2
+HCaught <stdout>: hPutChar: invalid argument (character is out of range for this encoding) while trying to write "H\941llo\n"
+test 3
+Hello Caught <stdout>: hPutChar: invalid argument (character is out of range for this encoding) while trying to write "Hello \945\946\947\n"
+test 1
+Caught <stdout>: commitBuffer: invalid argument (character is out of range for this encoding) while trying to write "\283\n"
+test 2
+HCaught <stdout>: commitBuffer: invalid argument (character is out of range for this encoding) while trying to write "H\941llo\n"
+test 3
+Hello Caught <stdout>: commitBuffer: invalid argument (character is out of range for this encoding) while trying to write "Hello \945\946\947\n"
+test 1
+Caught <stdout>: commitBuffer: invalid argument (character is out of range for this encoding) while trying to write "\283\n"
+test 2
+HCaught <stdout>: commitBuffer: invalid argument (character is out of range for this encoding) while trying to write "H\941llo\n"
+test 3
+Hello Caught <stdout>: commitBuffer: invalid argument (character is out of range for this encoding) while trying to write "Hello \945\946\947\n"
+test 1
+Caught <stdout>: commitBuffer: invalid argument (character is out of range for this encoding) while trying to write "\283\n"
+test 2
+HCaught <stdout>: commitBuffer: invalid argument (character is out of range for this encoding) while trying to write "H\941llo\n"
+test 3
+Hello Caught <stdout>: commitBuffer: invalid argument (character is out of range for this encoding) while trying to write "Hello \945\946\947\n"
+test 1
+Caught <stdout>: commitBuffer: invalid argument (character is out of range for this encoding) while trying to write "\283\n"
+test 2
+HCaught <stdout>: commitBuffer: invalid argument (character is out of range for this encoding) while trying to write "H\941llo\n"
+test 3
+Hello Caught <stdout>: commitBuffer: invalid argument (character is out of range for this encoding) while trying to write "Hello \945\946\947\n"
+test 1
+Caught <stdout>: commitBuffer: invalid argument (character is out of range for this encoding) while trying to write "\283\n"
+test 2
+HCaught <stdout>: commitBuffer: invalid argument (character is out of range for this encoding) while trying to write "H\941llo\n"
+test 3
+Hello Caught <stdout>: commitBuffer: invalid argument (character is out of range for this encoding) while trying to write "Hello \945\946\947\n"