
#6084: Add stg_ap_pnnv and related call patterns -------------------------------------+------------------------------------ Reporter: SimonMeier | Owner: Type: feature request | Status: new Priority: normal | Milestone: 7.8.1 Component: Runtime System | Version: 7.4.1 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: Unknown/Multiple Type of failure: None/Unknown | Difficulty: Unknown Test Case: | Blocked By: Blocking: 8313 | Related Tickets: -------------------------------------+------------------------------------ Changes (by int-e): * status: closed => new * resolution: fixed => Comment: This needs more work--currently the stage 2 compiler crashes occasionally. The obvious problem is that the new fast path in the code generated by {{{StgCmmLayout.slowCall}}} does not untag the pointer to the closure (this affects the arity test as well which makes it hard to trigger). I tried to fix this as follows: {{{ --- a/compiler/codeGen/StgCmmLayout.hs +++ b/compiler/codeGen/StgCmmLayout.hs @@ -192,9 +192,12 @@ slowCall fun stg_args let n_args = length stg_args if n_args > arity && optLevel dflags >= 2 then do + funv <- (CmmReg . CmmLocal) `fmap` assignTemp fun + let untaggedFunv = cmmOffset dflags funv (-1) -- is the tag always 1? + fast_code <- getCode $ emitCall (NativeNodeCall, NativeReturn) - (entryCode dflags (closureInfoPtr dflags fun)) + (entryCode dflags (closureInfoPtr dflags untaggedFunv)) (nonVArgs ((P,Just fun):argsreps)) slow_lbl <- newLabelC @@ -202,10 +205,9 @@ slowCall fun stg_args is_tagged_lbl <- newLabelC end_lbl <- newLabelC - funv <- (CmmReg . CmmLocal) `fmap` assignTemp fun - - let correct_arity = cmmEqWord dflags (funInfoArity dflags funv) - (mkIntExpr dflags n_args) + let correct_arity = cmmEqWord dflags + (funInfoArity dflags untaggedFunv) + (mkIntExpr dflags n_args) pprTrace "fast call" (int n_args) $ return () }}} But now I get {{{ ghc-stage2: internal error: PAP object entered! }}} and indeed PAPs are treated specially in the {{{stg_ap_*}}} functions, and the fast path does not mirror that special treatment. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/6084#comment:19 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler