| coreToStgExpr (Case scrut bndr ty []) | = coreToStgExpr (Case scrut bndr ty [(DEFAULT, [], mkImpossibleExpr | ty)])
Yes that should be fine. I'm afraid I have no idea why you are getting | Oops! Entered absent arg w_sc1l FilePath or seg-faults. Simon | | But that may be because of some libraries I need to recompile, although I'm | not | sure why this would be the case. | | The problem I'm trying to solve is my lint-safe (after the smarter lint check | about bottoming expressions) programs are failing with segfaults. Of course | that may be because I'm doing something wrong in STG level, but I'm trying to | make sure everything above STG is correct and bug-free. It'd be really great | if | I could somehow generate an erroring expression in some places that are | supposed to be unreachable, just to make sure my segfaults are not related | with | those. | | 2016-02-29 6:32 GMT-05:00 Simon Peyton Jones <[email protected]>: | > | I wanted to ask: Is there a restriction on what kind empty case | > | expressions are supported by the code generator or can I just improve | > | the lint check and assume that the code will be handled by the code | > | generator correctly? | > | > I believe the latter. See CoreToStg line 364. | > | > So feel free to make Lint cleverer; make sure you add a Note. But if it | /needs/ to be cleverer, that suggests that the simplifier should be cleverer | instead, and should simplify the code so that even a dumb Core Lint has no | trouble. | > | > In your example why didn't the simplifier do case-of-case? | > | > I suppose that this might be after some pass and before a simplifier run. | > | > Simon | > | > | -----Original Message----- | > | From: ghc-devs [mailto:[email protected]] On Behalf Of Ömer | > | Sinan Agacan | > | Sent: 29 February 2016 03:16 | > | To: ghc-devs <[email protected]> | > | Subject: CoreLint check for case with no alts | > | | > | Hi all, | > | | > | CoreLint has a check that, when seeing a case expression with empty | > | list of alternatives, checks whether the scrutinee is bottom. This | > | "bottom-ness" check is, however, very simple and returning many false | > | negatives. For example, when it sees a case expression, all it does is: | > | | > | go _ (Case _ _ _ alts) = null alts | > | | > | Which is just too simple for some cases. (it could check if all the | > | RHSs are bottom, or if the scrutinee is bottom etc.) | > | | > | I guess this makes sense, since it's OK to generate unreachable code, | > | but it's not OK to not generate a code in a reachable path. | > | | > | But in my case this is becoming problem as it's rejecting my seemingly | > | valid program. One of the relevant parts in my code is this: | > | | > | case ww_s4C3 of ww_X4Fb { | > | (#_||#) ww_s4Ce -> | > | case case ww_s4Ce of ww_s4F1 { (# ww_s4F2, ww_s4F3 #) -> | > | lvl_s4F4 ww_s4F3 ww_s4F2 | > | } | > | of wild_00 { | > | -- empty | > | }; | > | | > | lvl_s4F4 :: Int# -> String -> Var | > | [LclId, Arity=2, Str=DmdType (args: <L,U><L,U>) (res: x)] | > | lvl_s4F4 = | > | \ (ww_s4F3 :: Int#) (ww_s4F2 :: String) -> | > | lvl_s3V4 (TyVar ww_s4F2 ww_s4F3) | > | | > | lvl_s3V4 :: Var -> Var | > | [LclId, Arity=1, CallArity=1, Str=DmdType (args: <B,1*H>) (res: x)] | > | lvl_s3V4 = \ (i_a1vO :: Var) -> lvl_s4EZ i_a1vO | > | | > | lvl_s4EZ :: Var -> Var | > | [LclId, Arity=1, Str=DmdType (args: <L,U>) (res: x)] | > | lvl_s4EZ = \ (i_a1vO :: Var) -> error ... | > | | > | The scrutinee part of the case expression in the alternative is clearly | > | bottom, but this expression is rejected by the linter. | > | | > | One easy solution is to implement a more precise test and use it in | > | linter. But I thought maybe the current implementation is deliberately | > | so. Maybe the code generator doesn't support that type of code etc. so | > | I wanted to ask: Is there a restriction on what kind empty case | > | expressions are supported by the code generator or can I just improve | > | the lint check and assume that the code will be handled by the code | > | generator correctly? | > | | > | Thanks. | > | _______________________________________________ | > | ghc-devs mailing list | > | [email protected] | > | https://na01.safelinks.protection.outlook.com/?url=http%3a%2f%2fmail.ha | > | skell.org%2fcgi-bin%2fmailman%2flistinfo%2fghc- | > | devs&data=01%7c01%7csimonpj%40064d.mgd.microsoft.com%7ce621b9bcb2774ff8 | > | 522208d340b6c5a7%7c72f988bf86f141af91ab2d7cd011db47%7c1&sdata=cIiMVTgiH | > | ibh0SNksSZGLK75bZBgb3HA13USf78ohyQ%3d _______________________________________________ ghc-devs mailing list [email protected] http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
