summaryrefslogtreecommitdiff
path: root/testsuite/tests/rts/T12497.hs
diff options
context:
space:
mode:
Diffstat (limited to 'testsuite/tests/rts/T12497.hs')
-rw-r--r--testsuite/tests/rts/T12497.hs24
1 files changed, 24 insertions, 0 deletions
diff --git a/testsuite/tests/rts/T12497.hs b/testsuite/tests/rts/T12497.hs
new file mode 100644
index 0000000000..e649864842
--- /dev/null
+++ b/testsuite/tests/rts/T12497.hs
@@ -0,0 +1,24 @@
+{-# LANGUAGE CPP #-}
+
+#if defined(i386_HOST_ARCH)
+# define WINDOWS_CCONV stdcall
+#elif defined(x86_64_HOST_ARCH)
+# define WINDOWS_CCONV ccall
+#else
+# error Unknown mingw32 arch
+#endif
+
+import Foreign.C.String
+
+foreign import WINDOWS_CCONV "_strdup" strdup :: CString -> IO CString
+foreign import WINDOWS_CCONV "strdup" strdup2 :: CString -> IO CString
+
+dupString :: String -> IO String
+dupString str = newCString str >>= strdup >>= peekCString
+
+dupString2 :: String -> IO String
+dupString2 str = newCString str >>= strdup2 >>= peekCString
+
+main =
+ do print =<< dupString "Hello World!"
+ print =<< dupString2 "Hello Again World!"