Opened 9 years ago

Closed 9 years ago

Last modified 44 years ago

#448 closed bug (Duplicate)

compiler panic

Reported by: nobody Owned by: nobody
Priority: normal Milestone:
Component: GHCi Version: 6.4
Keywords: Cc:
Operating System: Architecture:
Type of failure: Difficulty:
Test Case: Blocked By:
Blocking: Related Tickets:

Description

I played with cyclic lists in GHCI.
My session looked like:

% ghci                                                
                                                    
   ___         ___ _
  / _ \ /\  /\/ __(_)
 / /_\// /_/ / /  | |      GHC Interactive, version
6.4, for Haskell 98.
/ /_\\/ __  / /___| |      http://www.haskell.org/ghc/
\____/\/ /_/\____/|_|      Type :? for help.

Loading package base-1.0 ... linking ... done.
Prelude> let cl = cycle [1..5]
Prelude> take 100 cl
[1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5]
Prelude> let cl = cycle [-2,2]
Prelude> take 100 cl
[-2,2,-2,2,-2,2,-2,2,-2,2,-2,2,-2,2,-2,2,-2,2,-2,2,-2,2,-2,2,-2,2,-2,2,-2,2,-2,2,-2,2,-2,2,-2,2,-2,2,-2,2,-2,2,-2,2,-2,2,-2,2,-2,2,-2,2,-2,2,-2,2,-2,2,-2,2,-2,2,-2,2,-2,2,-2,2,-2,2,-2,2,-2,2,-2,2,-2,2,-2,2,-2,2,-2,2,-2,2,-2,2,-2,2,-2,2,-2,2,-2,2,-2,2]
Prelude> let cl = cycle [-2..2]
Prelude> sum $ take 1000 cl
0
Prelude> sum $ take 10000 cl
0
Prelude> sum $ take 100000 cl
0
Prelude> sum $ take 1000000 cl
*** Exception: stack overflow
Prelude> sum $! take 1000000 cl
*** Exception: stack overflow
Prelude> foldl' (+) 0  $! take 1000000 cl

<interactive>:1:0: Not in scope: `foldl''
Prelude> List.foldl' (+) 0  $! take 1000000 cl

<interactive>:1:0: Not in scope: `List.foldl''
Prelude> Data.List.foldl' (+) 0  $! take 1000000 cl
0
Prelude> Data.List.foldl' (+) 0  $! take 10000000 cl
0
Prelude> Data.List.foldl' (+) 0  $! take 100000000 cl
0
Prelude> Data.List.foldl' (+) 0  $! take 100000000 cl
0
Prelude> Data.List.foldl' (+) 0  $! take 1000000 cl
0
Prelude> Data.List.foldl (+) 0  $! take 1000000 cl
*** Exception: stack overflow

*********************

After that I read "TyingTheKnot" page of HaWiki and
desided to repeat example with double linked list. So i
created file. It already contained some garbage from my
previous experiments but I decided it's irrelevant:

% cat test13.hs                                       
                                                    
import Control.Exception as C

data DL a = DL {prev_dl::DL, el::a, next_dl::DL}

mkDL :: [a] -> DL a
mkDL xs = let (first,last) = go last xs first
              in first

go :: DL a -> [a] -> DL a -> (DL a,DL a)
go prev [] next = (prev, next) 
go prev (x:xs) next = let this = DL prev x rest
                          (rest,fin) = go this xs next
                      in this

takeF 0 lst = []
takeF n lst = (el lst):takeF (n-1) next_dl lst

takeR 0 lst = []
takeR n lst = (el lst):takeF (n-1) prev_dl lst





main = do putStrLn "hello"
          r <- getLine
          C.catch (action r) handler
                
action :: String -> IO()
action r = if (r=="") then C.ioError (userError "input
void") 
           else print $ r++r

handler :: Exception -> IO()
% cat test14.hs                                       
                                                   
~/coding/Haskell 
% cat test13.hs                                       
                                                   
~/coding/Haskell 
import Control.Exception as C

data DL a = DL {prev_dl::DL, el::a, next_dl::DL}

mkDL :: [a] -> DL a
mkDL xs = let (first,last) = go last xs first
              in first

go :: DL a -> [a] -> DL a -> (DL a,DL a)
go prev [] next = (prev, next) 
go prev (x:xs) next = let this = DL prev x rest
                          (rest,fin) = go this xs next
                      in this

takeF 0 lst = []
takeF n lst = (el lst):takeF (n-1) next_dl lst

takeR 0 lst = []
takeR n lst = (el lst):takeF (n-1) prev_dl lst





main = do putStrLn "hello"
          r <- getLine
          C.catch (action r) handler
                
action :: String -> IO()
action r = if (r=="") then C.ioError (userError "input
void") 
           else print $ r++r

handler :: Exception -> IO()

*** end of test13.hs

After file was ready I tried to load it in my ghci
session and got this:

Prelude> :l test13.hs
Compiling Main             ( test13.hs, interpreted )
ghc-6.4: panic! (the `impossible' happened, GHC version
6.4):
        Unify.unifyTauTyLists: mismatched type lists!

Please report it as a compiler bug to
glasgow-haskell-bugs@haskell.org,
or http://sourceforge.net/projects/ghc/.

>
>

Some info about my system.

% uname -a                                            
                    
Linux mausov_comp 2.6.10-as5 #1 Fri Jun 24 13:45:31 MSD
2005 i686 Intel(R) Celeron(R) CPU 2.30GHz GenuineIntel
GNU/Linux

% gcc -v                                              
                                                    
Reading specs from
/usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.4/specs
Configured with:
/var/tmp/portage/gcc-3.3.4-r1/work/gcc-3.3.4/configure
--prefix=/usr
--bindir=/usr/i686-pc-linux-gnu/gcc-bin/3.3
--includedir=/usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.4/include
--datadir=/usr/share/gcc-data/i686-pc-linux-gnu/3.3
--mandir=/usr/share/gcc-data/i686-pc-linux-gnu/3.3/man
--infodir=/usr/share/gcc-data/i686-pc-linux-gnu/3.3/info
--enable-shared --host=i686-pc-linux-gnu
--target=i686-pc-linux-gnu --with-system-zlib
--enable-languages=c,c++ --enable-threads=posix
--enable-long-long --disable-checking
--disable-libunwind-exceptions --enable-cstdio=stdio
--enable-version-specific-runtime-libs
--with-gxx-include-dir=/usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.4/include/g++-v3
--with-local-prefix=/usr/local --enable-shared
--enable-nls --without-included-gettext
--disable-multilib --enable-__cxa_atexit
--enable-clocale=generic
Thread model: posix
gcc version 3.3.4 20040623 (Gentoo Linux 3.3.4-r1,
ssp-3.3.2-2, pie-8.7.6)

I compiled ghc-6.4 using ghc-6.2.2

My email is v_dmitry@list.ru

Hope that'l help










Change History (1)

comment:1 Changed 9 years ago by simonpj

  • Status changed from assigned to closed
Logged In: YES 
user_id=50165

Thanks for the report Dmitry.   Perhaps next time you could 
try to boil it down a bit more?  All the stuff about cyclic lists 
is unnecessary; your file test13.hs provokes the error all on 
its own!

Anyway, this is a duplicate of bug 1276115, and is already 
fixed.
Note: See TracTickets for help on using tickets.