#15570: Core transformations generate bad indexCharOffAddr# call -------------------------------------+------------------------------------- Reporter: alpmestan | Owner: alpmestan Type: bug | Status: new Priority: normal | Milestone: 8.6.1 Component: Compiler | Version: 8.5 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by simonpj): This is all very mysterious. What I get from HEAD (for `f`) is this: {{{ Rec { -- RHS size: {terms: 33, types: 19, coercions: 0, joins: 0/0} Bug.$wgo [InlPrag=NOUSERINLINE[2], Occ=LoopBreaker] :: Int# -> [Char] -> (# Char, [Char] #) [GblId, Arity=2, Caf=NoCafRefs, Str=<S,U><L,U>, Unf=OtherCon []] Bug.$wgo = \ (ww_s2QZ :: Int#) (w_s2QW :: [Char]) -> case quotRemInt# ww_s2QZ 62# of { (# ipv_a2OJ, ipv1_a2OK #) -> case indexCharOffAddr# chars62_r2NR ipv1_a2OK of wild_X4 { __DEFAULT -> case <# ww_s2QZ 62# of { __DEFAULT -> Bug.$wgo ipv_a2OJ (GHC.Types.: @ Char (GHC.Types.C# wild_X4) w_s2QW); 1# -> case indexCharOffAddr# chars62_r2NR ww_s2QZ of wild1_XM { __DEFAULT -> (# GHC.Types.C# wild1_XM, w_s2QW #) } } } } end Rec } -- RHS size: {terms: 13, types: 15, coercions: 0, joins: 0/0} Bug.f_go [InlPrag=NOUSERINLINE[2]] :: Int -> [Char] -> [Char] [GblId, Arity=2, Caf=NoCafRefs, Str=<S(S),1*U(U)><L,U>m2, Unf=Unf{Src=InlineStable, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=ALWAYS_IF(arity=2,unsat_ok=True,boring_ok=False) Tmpl= \ (w_s2QV [Occ=Once!] :: Int) (w1_s2QW [Occ=Once] :: [Char]) -> case w_s2QV of { I# ww1_s2QZ [Occ=Once] -> case Bug.$wgo ww1_s2QZ w1_s2QW of { (# ww3_s2R5 [Occ=Once], ww4_s2R6 [Occ=Once] #) -> GHC.Types.: @ Char ww3_s2R5 ww4_s2R6 } }}] Bug.f_go = \ (w_s2QV :: Int) (w1_s2QW :: [Char]) -> case w_s2QV of { I# ww1_s2QZ -> case Bug.$wgo ww1_s2QZ w1_s2QW of { (# ww3_s2R5, ww4_s2R6 #) -> GHC.Types.: @ Char ww3_s2R5 ww4_s2R6 } } -- RHS size: {terms: 12, types: 14, coercions: 0, joins: 0/0} f :: Int -> String [GblId, Arity=1, Caf=NoCafRefs, Str=<S(S),1*U(U)>m2, Unf=Unf{Src=InlineStable, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=ALWAYS_IF(arity=1,unsat_ok=True,boring_ok=False) Tmpl= \ (n__aXh [Occ=Once] :: Int) -> Bug.f_go n__aXh (GHC.Types.[] @ Char)}] f = \ (n__aXh :: Int) -> case n__aXh of { I# ww1_s2QZ -> case Bug.$wgo ww1_s2QZ (GHC.Types.[] @ Char) of { (# ww3_s2R5, ww4_s2R6 #) -> GHC.Types.: @ Char ww3_s2R5 ww4_s2R6 } } }}} which looks very plausible. You are getting something quite different with your Hadrian build. Can you give precise repro instructions? (Including `build.mk` etc.) I'm very puzzled about this mysterious case of `GHC.Real.even3`. Where on earth does that come from? And if it is equal to `-1` why doesn't the case get eliminated? -- Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/15570#comment:2> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler