
#10844: CallStack should not be inlined -------------------------------------+------------------------------------- Reporter: nomeata | Owner: gridaphobe Type: task | Status: patch Priority: normal | Milestone: Component: Compiler | Version: 7.10.2 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Phab:D1259 Wiki Page: | -------------------------------------+------------------------------------- Comment (by simonpj): Well the apppend-string rule is in `PrelRules.lhs`: {{{ match_append_lit :: [Expr CoreBndr] -> Maybe (Expr CoreBndr) match_append_lit [Type ty1, Lit (MachStr s1), c1, Var unpk `App` Type ty2 `App` Lit (MachStr s2) `App` c2 `App` n ] = ... }}} Notice that it maches only on actual literal strings. If they are floated to top level they'll be replaced by a `Var`. Probably an `Id` whose unfolding is the literal string, but still it won't match the above. Instead you probably need to use `exprIsLiteral_maybe` as in {{{ match_Word64ToInteger _ id_unf id [xl] | Just (MachWord64 x) <- exprIsLiteral_maybe id_unf xl = case splitFunTy_maybe (idType id) of }}} later in the same module. Try that? Indeed, ''every'' match on a `Lit` pattern in these rules should go via `exprIsLiteralMaybe`. See if this works and then maybe at least open a ticket for the others; preferably do them. Could be a big win! Simon -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10844#comment:21 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler