diff --git a/ghc/tests/programs/fexport/For.hs b/ghc/tests/programs/fexport/For.hs
new file mode 100644
index 0000000000000000000000000000000000000000..306c3a9fa4ab45683e5ba0e7534122ad399a3aa6
--- /dev/null
+++ b/ghc/tests/programs/fexport/For.hs
@@ -0,0 +1,25 @@
+module For where
+
+{-
+import IOExts
+import Addr
+--y = putChar
+
+count :: IORef Int -> IO Int
+count ref = do
+  x <- readIORef ref
+  writeIORef ref (x+1)
+  return x
+
+createCounter :: IO Addr
+createCounter = do
+  ref <- newIORef 0
+  mkCounter (count ref)
+
+foreign import "sin" msin :: Double -> IO Double
+-}
+
+foreign export "putChar" putChar :: Char -> IO ()
+
+--foreign export "createCounter" createCounter :: IO Addr
+--foreign export dynamic mkCounter :: (IO Int) -> IO Addr
diff --git a/ghc/tests/programs/fexport/Makefile b/ghc/tests/programs/fexport/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..d1dd14442d717a48593ed67d21415d94c200ace2
--- /dev/null
+++ b/ghc/tests/programs/fexport/Makefile
@@ -0,0 +1,10 @@
+TOP = ..
+include $(TOP)/mk/boilerplate.mk
+
+SRC_HC_OPTS += -fglasgow-exts -no-hs-main
+
+CC = $(HC)
+
+all :: runtest
+
+include $(TOP)/mk/target.mk
diff --git a/ghc/tests/programs/fexport/fexport.stdout b/ghc/tests/programs/fexport/fexport.stdout
new file mode 100644
index 0000000000000000000000000000000000000000..a5c19667710254f835085b99726e523457150e03
--- /dev/null
+++ b/ghc/tests/programs/fexport/fexport.stdout
@@ -0,0 +1 @@
+Hello, world
diff --git a/ghc/tests/programs/fexport/test.c b/ghc/tests/programs/fexport/test.c
new file mode 100644
index 0000000000000000000000000000000000000000..3712493dcfb507434fca5dccff7f18ee267e8edb
--- /dev/null
+++ b/ghc/tests/programs/fexport/test.c
@@ -0,0 +1,15 @@
+#include "For_stub.h"
+
+int
+main(int argc, char *argv[])
+{
+  int i;
+  char msg[] = "Hello, world\n";
+
+  startupHaskell(argc,argv);
+
+  for (i=0; i < sizeof(msg) - 1; i++) {
+     putChar(msg[i]);
+  }
+  shutdownHaskell();
+}