Skip to content
Snippets Groups Projects
Commit 41f0f6c2 authored by Richard Eisenberg's avatar Richard Eisenberg Committed by Ben Gamari
Browse files

Don't lint erroneous programs.

newFamInst lints its types. This is good. But it's not so good
when there have been errors and thus recovery tycons are about.
So we now don't.

Fixes #15796.

Test case: typecheck/should_fail/T15796

(cherry picked from commit 1f72a1c8)
parent 7a439e7b
No related branches found
No related tags found
No related merge requests found
......@@ -150,7 +150,7 @@ See #9562.
-- It is defined here to avoid a dependency from FamInstEnv on the monad
-- code.
newFamInst :: FamFlavor -> CoAxiom Unbranched -> TcRnIf gbl lcl FamInst
newFamInst :: FamFlavor -> CoAxiom Unbranched -> TcM FamInst
-- Freshen the type variables of the FamInst branches
newFamInst flavor axiom@(CoAxiom { co_ax_tc = fam_tc })
= ASSERT2( tyCoVarsOfTypes lhs `subVarSet` tcv_set, text "lhs" <+> pp_ax )
......@@ -162,7 +162,10 @@ newFamInst flavor axiom@(CoAxiom { co_ax_tc = fam_tc })
; let lhs' = substTys subst lhs
rhs' = substTy subst rhs
tcvs' = tvs' ++ cvs'
; when (gopt Opt_DoCoreLinting dflags) $
; ifErrsM (return ()) $ -- Don't lint when there are errors, because
-- errors might mean TcTyCons.
-- See Note [Recover from validity error] in TcTyClsDecls
when (gopt Opt_DoCoreLinting dflags) $
-- Check that the types involved in this instance are well formed.
-- Do /not/ expand type synonyms, for the reasons discussed in
-- Note [Linting type synonym applications].
......
{-# LANGUAGE GADTs #-}
{-# LANGUAGE TypeFamilies #-}
module Bug where
newtype N a where
MkN :: Show a => a -> N a
type family T a
type instance T (N a) = N a
T15796.hs:6:3: error:
• A newtype constructor cannot have a context in its type
MkN :: forall a. Show a => a -> N a
• In the definition of data constructor ‘MkN’
In the newtype declaration for ‘N’
......@@ -477,3 +477,4 @@ test('T15067', normal, compile_fail, [''])
test('T15361', normal, compile_fail, [''])
test('T15527', normal, compile_fail, [''])
test('T15767', normal, compile_fail, [''])
test('T15796', normal, compile_fail, [''])
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment