diff --git a/testsuite/tests/typecheck/should_fail/T502.hs b/testsuite/tests/typecheck/should_fail/T502.hs
new file mode 100644
index 0000000000000000000000000000000000000000..c73b7ac0e2f9b7c5e12385045f9cf400a14efa81
--- /dev/null
+++ b/testsuite/tests/typecheck/should_fail/T502.hs
@@ -0,0 +1,10 @@
+{-# LANGUAGE MagicHash, UnboxedTuples #-}
+
+module T502 where
+
+-- As per #502, the following type error message should correctly
+-- display the unboxed tuple type.
+bar :: Int
+bar = snd foo
+  where foo :: (# Int, Int #)
+        foo = undefined
diff --git a/testsuite/tests/typecheck/should_fail/T502.stderr b/testsuite/tests/typecheck/should_fail/T502.stderr
new file mode 100644
index 0000000000000000000000000000000000000000..ba5f6d157abc710f3c3594ac5ac269cc1a541afa
--- /dev/null
+++ b/testsuite/tests/typecheck/should_fail/T502.stderr
@@ -0,0 +1,12 @@
+
+T502.hs:8:11: error:
+    • Couldn't match expected type ‘(a0, Int)’
+                  with actual type ‘(# Int, Int #)’
+    • In the first argument of ‘snd’, namely ‘foo’
+      In the expression: snd foo
+      In an equation for ‘bar’:
+          bar
+            = snd foo
+            where
+                foo :: (# Int, Int #)
+                foo = undefined
diff --git a/testsuite/tests/typecheck/should_fail/all.T b/testsuite/tests/typecheck/should_fail/all.T
index c51398f00b95610f8f98094b086f1e5d813a7aca..60d556b800ddeb99fec46fbf7e53dc93365d9c23 100644
--- a/testsuite/tests/typecheck/should_fail/all.T
+++ b/testsuite/tests/typecheck/should_fail/all.T
@@ -515,3 +515,4 @@ test('T16204c', normal, compile_fail, [''])
 test('T16394', normal, compile_fail, [''])
 test('T16414', normal, compile_fail, [''])
 test('T16627', normal, compile_fail, [''])
+test('T502', normal, compile_fail, [''])