summaryrefslogtreecommitdiff
path: root/testsuite/tests/codeGen/should_run/Cgrun067A.hs
diff options
context:
space:
mode:
Diffstat (limited to 'testsuite/tests/codeGen/should_run/Cgrun067A.hs')
-rw-r--r--testsuite/tests/codeGen/should_run/Cgrun067A.hs16
1 files changed, 16 insertions, 0 deletions
diff --git a/testsuite/tests/codeGen/should_run/Cgrun067A.hs b/testsuite/tests/codeGen/should_run/Cgrun067A.hs
new file mode 100644
index 0000000000..96e944ed25
--- /dev/null
+++ b/testsuite/tests/codeGen/should_run/Cgrun067A.hs
@@ -0,0 +1,16 @@
+-- Bug doesn't show up on -O0
+{-# OPTIONS_GHC -O #-}
+module Cgrun067A (miscompiledFn) where
+
+import Foreign.C
+import Foreign
+
+miscompiledFn :: CString -> IO String
+miscompiledFn cp = do
+ l <- lengthArray0 0 cp
+ if l <= 0 then return "" else loop "" (l-1)
+ where
+ loop s i = do
+ xval <- peekElemOff cp i
+ let val = castCCharToChar xval
+ val `seq` if i <= 0 then return (val:s) else loop (val:s) (i-1)