#5393: Segfault with unboxed arrays, unsafeAt, optimisations
----------------------------------+-----------------------------------------
    Reporter:  daniel.is.fischer  |       Owner:                         
        Type:  bug                |      Status:  new                    
    Priority:  normal             |   Component:  Compiler (NCG)         
     Version:  7.0.4              |    Keywords:  unsafeAt, optimisations
    Testcase:                     |   Blockedby:                         
          Os:  Linux              |    Blocking:                         
Architecture:  x86_64 (amd64)     |     Failure:  Runtime crash          
----------------------------------+-----------------------------------------
 The programme
 {{{
 module Main (main) where

 import Data.Array.Unboxed
 import Data.Array.Base

 arr :: UArray Int Int
 arr = listArray (0,4) [3,2,5,1,4]

 fun :: Int -> Int
 fun n
   | n < 5   = unsafeAt arr n
   | n < 25  = unsafeAt arr (n `quot` 5) + unsafeAt arr (n `rem` 5)
   | otherwise = fun (n `quot` 5) + fun (n `rem` 5)

 main :: IO ()
 main = print (fun 5)
 }}}
 segfaults here when compiled with optimisations using the native code
 generator (I've tried various combinations of -O/-O2 and ghc 6.10.4,
 6.12.3, 7.0.2, 7.0.4, HEAD).

 When compiling via C:
 {{{
 dafis@schwartz:~/Haskell/CafeTesting> ghc -O2 -fvia-C -optc-O3 --make
 debug
 [1 of 1] Compiling Main             ( debug.hs, debug.o )

 In file included from /home/dafis/lib/ghc-7.0.4/include/Stg.h:230:0:
     0,
                      from /tmp/ghc5608_0/ghc5608_0.hc:3:

 /home/dafis/lib/ghc-7.0.4/include/stg/Regs.h:189:1:
      Warnung: für Ruf vorgesehenes Register wurde für globale
 Registervariable verwendet

 /home/dafis/lib/ghc-7.0.4/include/stg/Regs.h:195:1:
      Warnung: für Ruf vorgesehenes Register wurde für globale
 Registervariable verwendet

 /home/dafis/lib/ghc-7.0.4/include/stg/Regs.h:201:1:
      Warnung: für Ruf vorgesehenes Register wurde für globale
 Registervariable verwendet

 /home/dafis/lib/ghc-7.0.4/include/stg/Regs.h:207:1:
      Warnung: für Ruf vorgesehenes Register wurde für globale
 Registervariable verwendet

 /home/dafis/lib/ghc-7.0.4/include/stg/Regs.h:237:1:
      Warnung: für Ruf vorgesehenes Register wurde für globale
 Registervariable verwendet

 /home/dafis/lib/ghc-7.0.4/include/stg/Regs.h:243:1:
      Warnung: für Ruf vorgesehenes Register wurde für globale
 Registervariable verwendet

 /home/dafis/lib/ghc-7.0.4/include/stg/Regs.h:249:1:
      Warnung: für Ruf vorgesehenes Register wurde für globale
 Registervariable verwendet

 /home/dafis/lib/ghc-7.0.4/include/stg/Regs.h:255:1:
      Warnung: für Ruf vorgesehenes Register wurde für globale
 Registervariable verwendet

 /home/dafis/lib/ghc-7.0.4/include/stg/Regs.h:261:1:
      Warnung: für Ruf vorgesehenes Register wurde für globale
 Registervariable verwendet

 /home/dafis/lib/ghc-7.0.4/include/stg/Regs.h:267:1:
      Warnung: für Ruf vorgesehenes Register wurde für globale
 Registervariable verwendet

 on the commandline:
     Warning: The -fvia-C flag will be removed in a future GHC release
 Linking debug ...
 }}}
 (analogous warnings from 6.10.4 and 6.12.3, but not from HEAD), but the
 programme doesn't segfault with 6.10 and 6.12 via C, but does with HEAD.

 Nor does it segfault if compiled without optimisations or using `(!)`
 instead of `unsafeAt`.

-- 
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/5393>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler

_______________________________________________
Glasgow-haskell-bugs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs

Reply via email to