StgLint: Allow join point bindings of unlifted type
authorBen Gamari <bgamari.foss@gmail.com>
Tue, 22 Aug 2017 12:44:47 +0000 (08:44 -0400)
committerBen Gamari <ben@smart-cactus.org>
Tue, 22 Aug 2017 15:09:05 +0000 (11:09 -0400)
As described in `Note [CoreSyn let/app invariant]` this is allowed.

Fixes #14117.

Test Plan: Build GHC with BuildFlavour=devel2 with -dstg-lint

Reviewers: austin, simonpj

Reviewed By: simonpj

Subscribers: rwbarton, thomie

GHC Trac Issues: #14117

Differential Revision: https://phabricator.haskell.org/D3857

compiler/stgSyn/StgLint.hs

index cbfd11b..ad7b142 100644 (file)
@@ -11,7 +11,7 @@ module StgLint ( lintStgTopBindings ) where
 import StgSyn
 
 import Bag              ( Bag, emptyBag, isEmptyBag, snocBag, bagToList )
-import Id               ( Id, idType, isLocalId )
+import Id               ( Id, idType, isLocalId, isJoinId )
 import VarSet
 import DataCon
 import CoreSyn          ( AltCon(..) )
@@ -108,7 +108,7 @@ lint_binds_help (binder, rhs)
         _maybe_rhs_ty <- lintStgRhs rhs
 
         -- Check binder doesn't have unlifted type
-        checkL (not (isUnliftedType binder_ty))
+        checkL (isJoinId binder || not (isUnliftedType binder_ty))
                (mkUnliftedTyMsg binder rhs)
 
         -- Check match to RHS type