From 040b7deab8dceb8cc98a596c38fdb207c10636f1 Mon Sep 17 00:00:00 2001
From: simonmar <unknown>
Date: Tue, 5 Sep 2000 12:38:27 +0000
Subject: [PATCH] [project @ 2000-09-05 12:38:26 by simonmar] Add tests for
 newtypes in foreign declarations.

---
 ghc/tests/ccall/should_compile/Makefile  |  1 +
 ghc/tests/ccall/should_compile/cc008.hs  |  8 ++++++++
 ghc/tests/ccall/should_compile/cc009.hs  |  8 ++++++++
 ghc/tests/ccall/should_fail/cc005.hs     | 11 +++++++++++
 ghc/tests/ccall/should_fail/cc005.stderr | 13 +++++++++++++
 5 files changed, 41 insertions(+)
 create mode 100644 ghc/tests/ccall/should_compile/cc008.hs
 create mode 100644 ghc/tests/ccall/should_compile/cc009.hs
 create mode 100644 ghc/tests/ccall/should_fail/cc005.hs
 create mode 100644 ghc/tests/ccall/should_fail/cc005.stderr

diff --git a/ghc/tests/ccall/should_compile/Makefile b/ghc/tests/ccall/should_compile/Makefile
index a56869f13de2..c6acaf680ba6 100644
--- a/ghc/tests/ccall/should_compile/Makefile
+++ b/ghc/tests/ccall/should_compile/Makefile
@@ -7,6 +7,7 @@ SRC_HC_OPTS += -dcore-lint -fglasgow-exts
 # Note that these tests are still in a state of flux... don't believe errors
 # they report. In fact, these aren't really very good tests at all...
 
+cc004_HC_OPTS = -fvia-C
 cc005_HC_OPTS = -fvia-C
 cc006_HC_OPTS = -fvia-C -fno-prune-tydecls
 
diff --git a/ghc/tests/ccall/should_compile/cc008.hs b/ghc/tests/ccall/should_compile/cc008.hs
new file mode 100644
index 000000000000..6e141f49b5a4
--- /dev/null
+++ b/ghc/tests/ccall/should_compile/cc008.hs
@@ -0,0 +1,8 @@
+-- !!! cc008 -- foreign export dynamic returning newtype of Addr
+module Test where
+
+import Addr
+
+newtype Ptr a = Ptr Addr
+
+foreign export dynamic mkFoo :: IO () -> IO (Ptr Int)
diff --git a/ghc/tests/ccall/should_compile/cc009.hs b/ghc/tests/ccall/should_compile/cc009.hs
new file mode 100644
index 000000000000..959ebea9a2e2
--- /dev/null
+++ b/ghc/tests/ccall/should_compile/cc009.hs
@@ -0,0 +1,8 @@
+-- !!! cc009 -- foreign label returning newtype of Addr
+module Test where
+
+import Addr
+
+newtype Ptr a = Ptr Addr
+
+foreign label foo :: Ptr Int
diff --git a/ghc/tests/ccall/should_fail/cc005.hs b/ghc/tests/ccall/should_fail/cc005.hs
new file mode 100644
index 000000000000..f04b155aa380
--- /dev/null
+++ b/ghc/tests/ccall/should_fail/cc005.hs
@@ -0,0 +1,11 @@
+-- !!! illegal types in foreign export delarations
+
+module ShouldFail where
+
+import PrelGHC
+
+foreign export foo :: Int# -> IO ()
+foo i | i ==# 0# = return ()
+
+foreign export bar :: Int -> Int#
+bar _ = 42#
diff --git a/ghc/tests/ccall/should_fail/cc005.stderr b/ghc/tests/ccall/should_fail/cc005.stderr
new file mode 100644
index 000000000000..7c5c5485c665
--- /dev/null
+++ b/ghc/tests/ccall/should_fail/cc005.stderr
@@ -0,0 +1,13 @@
+
+cc005.hs:7:
+    Unacceptable argument type in foreign declaration: Int#
+    When checking declaration:
+	foreign export _ccall "foo" foo :: Int# -> IO ()
+
+cc005.hs:10:
+    Unacceptable result type in foreign declaration: Int#
+    When checking declaration:
+	foreign export _ccall "bar" bar :: Int -> Int#
+
+Compilation had errors
+
-- 
GitLab