summaryrefslogtreecommitdiff
path: root/testsuite/tests/codeGen/should_run/Cgrun067A.hs
blob: 96e944ed25490d083db582d777f9ce128358d6e3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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)