diff --git a/testsuite/tests/th/wasm/T25473A.hs b/testsuite/tests/th/wasm/T25473A.hs
new file mode 100644
index 0000000000000000000000000000000000000000..7cb52348b53ffee8ecc93de03c776b04302dce7e
--- /dev/null
+++ b/testsuite/tests/th/wasm/T25473A.hs
@@ -0,0 +1,8 @@
+module T25473A where
+
+import GHC.Wasm.Prim
+
+type BinOp a = a -> a -> a
+
+foreign import javascript "wrapper"
+  mkJSBinOp :: BinOp Int -> IO JSVal
diff --git a/testsuite/tests/th/wasm/T25473B.hs b/testsuite/tests/th/wasm/T25473B.hs
new file mode 100644
index 0000000000000000000000000000000000000000..2d74a7cc2f36f23f5be892744eb305b5eb8a1e52
--- /dev/null
+++ b/testsuite/tests/th/wasm/T25473B.hs
@@ -0,0 +1,10 @@
+{-# LANGUAGE TemplateHaskell #-}
+
+module T25473B where
+
+import Language.Haskell.TH
+import T25473A
+
+$(runIO $ do
+  _ <- mkJSBinOp (+)
+  pure [])
diff --git a/testsuite/tests/th/wasm/all.T b/testsuite/tests/th/wasm/all.T
new file mode 100644
index 0000000000000000000000000000000000000000..9bc4793eaa08b33c6390dc3dbd0d94800a106d7b
--- /dev/null
+++ b/testsuite/tests/th/wasm/all.T
@@ -0,0 +1,5 @@
+setTestOpts([
+  unless(arch('wasm32'), skip)
+])
+
+test('T25473', [expect_broken(25473)], multimod_compile, ['T25473B', '-v0'])