diff --git a/testsuite/tests/driver/Makefile b/testsuite/tests/driver/Makefile
index 8d47dba2d58b5c7c65a03ea5db282bb9c862d48d..b30c8a77cb8e96592c43fd3e8f4eb66c3723de65 100644
--- a/testsuite/tests/driver/Makefile
+++ b/testsuite/tests/driver/Makefile
@@ -740,6 +740,29 @@ T20316:
 	echo "*** non-module.dump-timings ***"
 	cat non-module.dump-timings | grep alloc | sed 's/alloc.*//'
 
+.PHONY: T16476a
+T16476a:
+	echo '--make' > resp
+	echo '-XCPP' >> resp
+	echo '-DTEST' >> resp
+	echo 'T16476a.hs' >> resp
+	"$(TEST_HC)" $(TEST_HC_OPTS) -v0 @resp
+	./T16476a
+
+# Tests that response files and -unit @file arguments work as expected.
+.PHONY: T16476b
+T16476b:
+	echo '-XCPP' >> unit-a
+	echo '-DTEST' >> unit-a
+	echo 'T16476b.hs' >> unit-a
+	
+	echo '--make' > resp
+	echo '-unit' > resp
+	echo '@unit-a' > resp
+	
+	"$(TEST_HC)" $(TEST_HC_OPTS) -v0 @resp
+	./T16476b
+
 .PHONY: T20569
 T20569:
 	"$(TEST_HC)" $(TEST_HC_OPTS) -c T20569/A.hs -i -iT20569 -hidir=interface
diff --git a/testsuite/tests/driver/T16476a.hs b/testsuite/tests/driver/T16476a.hs
new file mode 100644
index 0000000000000000000000000000000000000000..903c5b3000bf61c11c35e6f48a4ac0a5f5da6b9e
--- /dev/null
+++ b/testsuite/tests/driver/T16476a.hs
@@ -0,0 +1,8 @@
+module Main where
+
+main :: IO ()
+main = do
+#if defined(TEST)
+    putStrLn "hello"
+#endif
+    putStrLn "world"
diff --git a/testsuite/tests/driver/T16476a.stdout b/testsuite/tests/driver/T16476a.stdout
new file mode 100644
index 0000000000000000000000000000000000000000..94954abda49de8615a048f8d2e64b5de848e27a1
--- /dev/null
+++ b/testsuite/tests/driver/T16476a.stdout
@@ -0,0 +1,2 @@
+hello
+world
diff --git a/testsuite/tests/driver/T16476b.hs b/testsuite/tests/driver/T16476b.hs
new file mode 100644
index 0000000000000000000000000000000000000000..903c5b3000bf61c11c35e6f48a4ac0a5f5da6b9e
--- /dev/null
+++ b/testsuite/tests/driver/T16476b.hs
@@ -0,0 +1,8 @@
+module Main where
+
+main :: IO ()
+main = do
+#if defined(TEST)
+    putStrLn "hello"
+#endif
+    putStrLn "world"
diff --git a/testsuite/tests/driver/T16476b.stdout b/testsuite/tests/driver/T16476b.stdout
new file mode 100644
index 0000000000000000000000000000000000000000..94954abda49de8615a048f8d2e64b5de848e27a1
--- /dev/null
+++ b/testsuite/tests/driver/T16476b.stdout
@@ -0,0 +1,2 @@
+hello
+world
diff --git a/testsuite/tests/driver/all.T b/testsuite/tests/driver/all.T
index 92fa6edcebf2702c0fb8b57cf39a83bae4f4fea9..35ee56dc52897f4141099ba42cc13657366b90de 100644
--- a/testsuite/tests/driver/all.T
+++ b/testsuite/tests/driver/all.T
@@ -304,4 +304,6 @@ test('T20200loop', extra_files(['T20200loop']), multimod_compile,
 test('T20316', normal, makefile_test, [])
 test('MultiRootsErr', normal, multimod_compile_fail, ['MultiRootsErr', 'MultiRootsErr'])
 test('patch-level2', normal, compile, ['-Wcpp-undef'])
+test('T16476a', normal, makefile_test, [])
+test('T16476b', normal, makefile_test, [])
 test('T20569', extra_files(["T20569/"]), makefile_test, [])