diff options
author | Sebastian Graf <sebastian.graf@kit.edu> | 2020-07-01 15:48:41 +0200 |
---|---|---|
committer | Sebastian Graf <sebastian.graf@kit.edu> | 2020-09-10 17:03:12 +0200 |
commit | 3777be14e104f040b826762f5ab42a8b898d85ae (patch) | |
tree | 1af2c1cc113db6f142486c111ca467bb8b7195a4 /compiler/GHC/HsToCore/Monad.hs | |
parent | 6abe4a1c427a511aa698424055639ea789fccf97 (diff) | |
download | haskell-wip/T18341.tar.gz |
PmCheck: Handle ⊥ and strict fields correctly (#18341)wip/T18341
In #18341, we discovered an incorrect digression from Lower Your Guards.
This MR changes what's necessary to support properly fixing #18341.
In particular, bottomness constraints are now properly tracked in the
oracle/inhabitation testing, as an additional field
`vi_bot :: Maybe Bool` in `VarInfo`. That in turn allows us to
model newtypes as advertised in the Appendix of LYG and fix #17725.
Proper handling of ⊥ also fixes #17977 (once again) and fixes #18670.
For some reason I couldn't follow, this also fixes #18273.
I also added a couple of regression tests that were missing. Most of
them were already fixed before.
In summary, this patch fixes #18341, #17725, #18273, #17977 and #18670.
Metric Decrease:
T12227
Diffstat (limited to 'compiler/GHC/HsToCore/Monad.hs')
-rw-r--r-- | compiler/GHC/HsToCore/Monad.hs | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/compiler/GHC/HsToCore/Monad.hs b/compiler/GHC/HsToCore/Monad.hs index b6b0305a25..08b62ee14f 100644 --- a/compiler/GHC/HsToCore/Monad.hs +++ b/compiler/GHC/HsToCore/Monad.hs @@ -34,7 +34,7 @@ module GHC.HsToCore.Monad ( DsMetaEnv, DsMetaVal(..), dsGetMetaEnv, dsLookupMetaEnv, dsExtendMetaEnv, -- Getting and setting pattern match oracle states - getPmDeltas, updPmDeltas, + getPmNablas, updPmNablas, -- Get COMPLETE sets of a TyCon dsGetCompleteMatches, @@ -304,7 +304,7 @@ mkDsEnvs dflags mod rdr_env type_env fam_inst_env msg_var cc_st_var } lcl_env = DsLclEnv { dsl_meta = emptyNameEnv , dsl_loc = real_span - , dsl_deltas = initDeltas + , dsl_nablas = initNablas } in (gbl_env, lcl_env) @@ -403,14 +403,14 @@ the @SrcSpan@ being carried around. getGhcModeDs :: DsM GhcMode getGhcModeDs = getDynFlags >>= return . ghcMode --- | Get the current pattern match oracle state. See 'dsl_deltas'. -getPmDeltas :: DsM Deltas -getPmDeltas = do { env <- getLclEnv; return (dsl_deltas env) } +-- | Get the current pattern match oracle state. See 'dsl_nablas'. +getPmNablas :: DsM Nablas +getPmNablas = do { env <- getLclEnv; return (dsl_nablas env) } -- | Set the pattern match oracle state within the scope of the given action. --- See 'dsl_deltas'. -updPmDeltas :: Deltas -> DsM a -> DsM a -updPmDeltas deltas = updLclEnv (\env -> env { dsl_deltas = deltas }) +-- See 'dsl_nablas'. +updPmNablas :: Nablas -> DsM a -> DsM a +updPmNablas nablas = updLclEnv (\env -> env { dsl_nablas = nablas }) getSrcSpanDs :: DsM SrcSpan getSrcSpanDs = do { env <- getLclEnv |