diff options
-rw-r--r-- | compiler/GHC/Tc/Errors.hs | 19 | ||||
-rw-r--r-- | compiler/GHC/Tc/Errors/Types.hs | 9 | ||||
-rw-r--r-- | compiler/GHC/Tc/Utils/Monad.hs | 2 | ||||
-rw-r--r-- | testsuite/tests/typecheck/should_compile/T21315.hs | 6 | ||||
-rw-r--r-- | testsuite/tests/typecheck/should_compile/T21315.stderr | 4 | ||||
-rw-r--r-- | testsuite/tests/typecheck/should_compile/all.T | 1 |
6 files changed, 32 insertions, 9 deletions
diff --git a/compiler/GHC/Tc/Errors.hs b/compiler/GHC/Tc/Errors.hs index 9b9eb8077b..f662495f2c 100644 --- a/compiler/GHC/Tc/Errors.hs +++ b/compiler/GHC/Tc/Errors.hs @@ -393,17 +393,22 @@ warnRedundantConstraints ctxt env info ev_vars = return () | SigSkol user_ctxt _ _ <- info - = restoreLclEnv env $ -- We want to add "In the type signature for f" - -- to the error context, which is a bit tiresome + -- When dealing with a user-written type signature, + -- we want to add "In the type signature for f". + = restoreLclEnv env $ setSrcSpan (redundantConstraintsSpan user_ctxt) $ report_redundant_msg True + -- ^^^^ add "In the type signature..." - | otherwise -- But for InstSkol there already *is* a surrounding - -- "In the instance declaration for Eq [a]" context - -- and we don't want to say it twice. Seems a bit ad-hoc - = report_redundant_msg False + | otherwise + -- But for InstSkol there already *is* a surrounding + -- "In the instance declaration for Eq [a]" context + -- and we don't want to say it twice. Seems a bit ad-hoc + = restoreLclEnv env + $ report_redundant_msg False + -- ^^^^^ don't add "In the type signature..." where - report_redundant_msg :: Bool -- whether to add "In ..." to the diagnostic + report_redundant_msg :: Bool -- whether to add "In the type signature..." to the diagnostic -> TcRn () report_redundant_msg show_info = do { lcl_env <- getLclEnv diff --git a/compiler/GHC/Tc/Errors/Types.hs b/compiler/GHC/Tc/Errors/Types.hs index 113e89c15b..3c67bcb507 100644 --- a/compiler/GHC/Tc/Errors/Types.hs +++ b/compiler/GHC/Tc/Errors/Types.hs @@ -204,7 +204,14 @@ data TcRnMessage where Test cases: T9939, T10632, T18036a, T20602, PluralS, T19296. -} - TcRnRedundantConstraints :: [Id] -> (SkolemInfoAnon, Bool) -> TcRnMessage + TcRnRedundantConstraints :: [Id] + -> (SkolemInfoAnon, Bool) + -- ^ The contextual skolem info. + -- The boolean controls whether we + -- want to show it in the user message. + -- (Nice to keep track of the info in either case, + -- for other users of the GHC API.) + -> TcRnMessage {-| TcRnInaccessibleCode is a warning that is emitted when the RHS of a pattern match is inaccessible, because the constraint solver has detected a contradiction. diff --git a/compiler/GHC/Tc/Utils/Monad.hs b/compiler/GHC/Tc/Utils/Monad.hs index 75d6491bad..dada2c8041 100644 --- a/compiler/GHC/Tc/Utils/Monad.hs +++ b/compiler/GHC/Tc/Utils/Monad.hs @@ -536,7 +536,7 @@ The `tcRnSrcDecls` extends the environments in `gbl_env` and `lcl_env` which we then want to be in scope in `more stuff`. The problem is that `lcl_env :: TcLclEnv` has an IORef for error -messages `tcl_errs`, and another for constraints (`tcl_lie`),a and +messages `tcl_errs`, and another for constraints (`tcl_lie`), and another for Linear Haskell usage information (`tcl_usage`). Now suppose we change it a tiny bit do { (gbl_env, lcl_env) <- checkNoErrs $ diff --git a/testsuite/tests/typecheck/should_compile/T21315.hs b/testsuite/tests/typecheck/should_compile/T21315.hs new file mode 100644 index 0000000000..34a8c8296f --- /dev/null +++ b/testsuite/tests/typecheck/should_compile/T21315.hs @@ -0,0 +1,6 @@ +module T21315 where + +data T a = MkT a deriving (Eq, Ord) + +class Ord a => C a +instance (Eq a, Ord a) => C (T a) diff --git a/testsuite/tests/typecheck/should_compile/T21315.stderr b/testsuite/tests/typecheck/should_compile/T21315.stderr new file mode 100644 index 0000000000..ad718569ec --- /dev/null +++ b/testsuite/tests/typecheck/should_compile/T21315.stderr @@ -0,0 +1,4 @@ + +T21315.hs:6:10: warning: [-Wredundant-constraints] + • Redundant constraint: Eq a + • In the instance declaration for ‘C (T a)’ diff --git a/testsuite/tests/typecheck/should_compile/all.T b/testsuite/tests/typecheck/should_compile/all.T index a503d60b7c..f110e273a8 100644 --- a/testsuite/tests/typecheck/should_compile/all.T +++ b/testsuite/tests/typecheck/should_compile/all.T @@ -823,3 +823,4 @@ test('T18529', normal, compile, ['-ddump-tc -fprint-explicit-foralls -dsuppress- test('T21023', normal, compile, ['-ddump-types']) test('T21205', normal, compile, ['-O0']) test('T21323', normal, compile, ['']) +test('T21315', normal, compile, ['-Wredundant-constraints']) |