diff options
author | Richard Eisenberg <rae@richarde.dev> | 2020-12-24 15:04:06 -0500 |
---|---|---|
committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2020-12-25 03:48:37 -0500 |
commit | 164887da63eaac4e786921a9d3591d4b796ee39e (patch) | |
tree | 1b07e39811e3dd0c587cf5349a0ee06d5d24cbed /compiler/GHC/Hs | |
parent | adaa6194753f33a705ac57cd8ddb94dc9aff1f54 (diff) | |
download | haskell-164887da63eaac4e786921a9d3591d4b796ee39e.tar.gz |
Use mutable update to defer out-of-scope errors
Previously, we let-bound an identifier to use to carry
the erroring evidence for an out-of-scope variable. But
this failed for levity-polymorphic out-of-scope variables,
leading to a panic (#17812). The new plan is to use
a mutable update to just write the erroring expression directly
where it needs to go.
Close #17812.
Test case: typecheck/should_compile/T17812
Diffstat (limited to 'compiler/GHC/Hs')
-rw-r--r-- | compiler/GHC/Hs/Expr.hs | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/compiler/GHC/Hs/Expr.hs b/compiler/GHC/Hs/Expr.hs index ef8934b831..78b07e54a3 100644 --- a/compiler/GHC/Hs/Expr.hs +++ b/compiler/GHC/Hs/Expr.hs @@ -38,7 +38,6 @@ import GHC.Hs.Binds -- others: import GHC.Tc.Types.Evidence import GHC.Core -import GHC.Types.Id( Id ) import GHC.Types.Name import GHC.Types.Name.Set import GHC.Types.Basic @@ -252,8 +251,10 @@ data HsExpr p -- Turned from HsVar to HsUnboundVar by the -- renamer, when it finds an out-of-scope -- variable or hole. - -- The (XUnboundVar p) field becomes Id - -- after typechecking + -- The (XUnboundVar p) field becomes an HoleExprRef + -- after typechecking; this is where the + -- erroring expression will be written after + -- solving. See Note [Holes] in GHC.Tc.Types.Constraint. | HsConLikeOut (XConLikeOut p) ConLike -- ^ After typechecker only; must be different @@ -608,7 +609,11 @@ type instance XApp (GhcPass _) = NoExtField type instance XUnboundVar GhcPs = NoExtField type instance XUnboundVar GhcRn = NoExtField -type instance XUnboundVar GhcTc = Id +type instance XUnboundVar GhcTc = HoleExprRef + -- We really don't need the whole HoleExprRef; just the IORef EvTerm + -- would be enough. But then deriving a Data instance becomes impossible. + -- Much, much easier just to define HoleExprRef with a Data instance and + -- store the whole structure. type instance XAppTypeE GhcPs = NoExtField type instance XAppTypeE GhcRn = NoExtField |