[[project @ 2003-11-03 10:11:04 by simonmar] simonmar**20031103101104 merge rev. 1.9.6.1 to the HEAD (add overflown relocs bug) ] { hunk ./ghc/docs/users_guide/bugs.sgml 253 + + Bugs in GHC + hunk ./ghc/docs/users_guide/bugs.sgml 259 - patterns (see , and usually + patterns (see ), and usually hunk ./ghc/docs/users_guide/bugs.sgml 306 + GHC's inliner can be persuaded into non-termination + using the standard way to encode recursion via a data type: + + data U = MkU (U -> Bool) + + russel :: U -> Bool + russel u@(MkU p) = not $ p u + + x :: Bool + x = russel (MkU russel) + + + We have never found another class of programs, other + than this contrived one, that makes GHC diverge, and fixing + the problem would impose an extra overhead on every + compilation. So the bug remains un-fixed. There is more + background in + Secrets of the GHC inliner. + + + + + + Bugs in GHCi (the interactive GHC) + + hunk ./ghc/docs/users_guide/bugs.sgml 353 - - GHC's inliner can be persuaded into non-termination - using the standard way to encode recursion via a data type: + + On Windows, there's a GNU ld/BFD bug + whereby it emits bogus PE object files that have more than + 0xffff relocations. When GHCi tries to load a package affected by this + bug, you get an error message of the form hunk ./ghc/docs/users_guide/bugs.sgml 359 - data U = MkU (U -> Bool) - - russel :: U -> Bool - russel u@(MkU p) = not $ p u - - x :: Bool - x = russel (MkU russel) + Loading package javavm ... linking ... Overflown relocs: 4 hunk ./ghc/docs/users_guide/bugs.sgml 361 - - We have never found another class of programs, other - than this contrived one, that makes GHC diverge, and fixing - the problem would impose an extra overhead on every - compilation. So the bug remains un-fixed. There is more - background in - Secrets of the GHC inliner. + The last time we looked, this bug still + wasn't fixed in the BFD codebase, and there wasn't any + noticeable interest in fixing it when we reported the bug + back in 2001 or so. + + The workaround is to split up the .o files that make up + your package into two or more .o's, along the lines of + how the "base" package does it. hunk ./ghc/docs/users_guide/bugs.sgml 371 + }