summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTorsten Schmits <git@tryp.io>2023-03-14 13:46:59 +0100
committerMarge Bot <ben+marge-bot@smart-cactus.org>2023-03-17 14:36:49 -0400
commit73d07c6e1986bd2b3516d4f009cc1e30ba804f06 (patch)
tree8be1ce674ba675db5b184e8277fc0e6c45c843a5
parent19d6d0397c223bbec3c372d2b8c04c2e356c44a8 (diff)
downloadhaskell-73d07c6e1986bd2b3516d4f009cc1e30ba804f06.tar.gz
Add structured error messages for GHC.Tc.Utils.Backpack
Tracking ticket: #20119 MR: !10127 This converts uses of `mkTcRnUnknownMessage` to newly added constructors of `TcRnMessage`. One occurrence, when handing a nested error from the interface loading machinery, was omitted. It will be handled by a subsequent changeset that addresses interface errors.
-rw-r--r--compiler/GHC/Tc/Errors/Ppr.hs39
-rw-r--r--compiler/GHC/Tc/Errors/Types.hs54
-rw-r--r--compiler/GHC/Tc/Utils/Backpack.hs24
-rw-r--r--compiler/GHC/Types/Error/Codes.hs6
-rw-r--r--compiler/GHC/Types/Name/Shape.hs23
-rw-r--r--testsuite/tests/backpack/cabal/bkpcabal06/bkpcabal06.stderr2
-rw-r--r--testsuite/tests/backpack/should_fail/bkpfail01.stderr4
-rw-r--r--testsuite/tests/backpack/should_fail/bkpfail05.stderr2
-rw-r--r--testsuite/tests/backpack/should_fail/bkpfail09.stderr4
-rw-r--r--testsuite/tests/backpack/should_fail/bkpfail16.stderr2
-rw-r--r--testsuite/tests/backpack/should_fail/bkpfail20.stderr2
-rw-r--r--testsuite/tests/backpack/should_fail/bkpfail21.stderr2
-rw-r--r--testsuite/tests/backpack/should_fail/bkpfail35.stderr2
-rw-r--r--testsuite/tests/backpack/should_fail/bkpfail37.stderr2
-rw-r--r--testsuite/tests/backpack/should_fail/bkpfail38.stderr2
15 files changed, 121 insertions, 49 deletions
diff --git a/compiler/GHC/Tc/Errors/Ppr.hs b/compiler/GHC/Tc/Errors/Ppr.hs
index a800b451c9..edb30d6e98 100644
--- a/compiler/GHC/Tc/Errors/Ppr.hs
+++ b/compiler/GHC/Tc/Errors/Ppr.hs
@@ -73,6 +73,7 @@ import GHC.Types.Unique.Set ( nonDetEltsUniqSet )
import GHC.Types.Var
import GHC.Types.Var.Set
import GHC.Types.Var.Env
+import GHC.Types.Fixity (defaultFixity)
import GHC.Unit.State (pprWithUnitState, UnitState)
import GHC.Unit.Module
@@ -994,6 +995,32 @@ instance Diagnostic TcRnMessage where
TcRnIllegalHsigDefaultMethods name meths
-> mkSimpleDecorated $
text "Illegal default method" <> plural (NE.toList meths) <+> text "in class definition of" <+> ppr name <+> text "in hsig file"
+ TcRnHsigFixityMismatch real_thing real_fixity sig_fixity
+ ->
+ let ppr_fix f = ppr f <+> if f == defaultFixity then parens (text "default") else empty
+ in mkSimpleDecorated $
+ vcat [ppr real_thing <+> text "has conflicting fixities in the module",
+ text "and its hsig file",
+ text "Main module:" <+> ppr_fix real_fixity,
+ text "Hsig file:" <+> ppr_fix sig_fixity]
+ TcRnHsigShapeMismatch (HsigShapeSortMismatch info1 info2)
+ -> mkSimpleDecorated $
+ text "While merging export lists, could not combine"
+ <+> ppr info1 <+> text "with" <+> ppr info2
+ <+> parens (text "one is a type, the other is a plain identifier")
+ TcRnHsigShapeMismatch (HsigShapeNotUnifiable name1 name2 notHere)
+ ->
+ let extra = if notHere
+ then text "Neither name variable originates from the current signature."
+ else empty
+ in mkSimpleDecorated $
+ text "While merging export lists, could not unify"
+ <+> ppr name1 <+> text "with" <+> ppr name2 $$ extra
+ TcRnHsigMissingModuleExport occ unit_state impl_mod
+ -> mkSimpleDecorated $
+ quotes (ppr occ)
+ <+> text "is exported by the hsig file, but not exported by the implementing module"
+ <+> quotes (pprWithUnitState unit_state $ ppr impl_mod)
TcRnBadGenericMethod clas op
-> mkSimpleDecorated $
hsep [text "Class", quotes (ppr clas),
@@ -1726,6 +1753,12 @@ instance Diagnostic TcRnMessage where
-> WarningWithFlag Opt_WarnWarningsDeprecations
TcRnIllegalHsigDefaultMethods{}
-> ErrorWithoutFlag
+ TcRnHsigFixityMismatch{}
+ -> ErrorWithoutFlag
+ TcRnHsigShapeMismatch{}
+ -> ErrorWithoutFlag
+ TcRnHsigMissingModuleExport{}
+ -> ErrorWithoutFlag
TcRnBadGenericMethod{}
-> ErrorWithoutFlag
TcRnWarningMinimalDefIncomplete{}
@@ -2196,6 +2229,12 @@ instance Diagnostic TcRnMessage where
-> noHints
TcRnIllegalHsigDefaultMethods{}
-> noHints
+ TcRnHsigFixityMismatch{}
+ -> noHints
+ TcRnHsigShapeMismatch{}
+ -> noHints
+ TcRnHsigMissingModuleExport{}
+ -> noHints
TcRnBadGenericMethod{}
-> noHints
TcRnWarningMinimalDefIncomplete{}
diff --git a/compiler/GHC/Tc/Errors/Types.hs b/compiler/GHC/Tc/Errors/Types.hs
index 82d749e4ea..85e7a18377 100644
--- a/compiler/GHC/Tc/Errors/Types.hs
+++ b/compiler/GHC/Tc/Errors/Types.hs
@@ -91,6 +91,7 @@ module GHC.Tc.Errors.Types (
, DeclSort(..)
, NonStandardGuards(..)
, RuleLhsErrReason(..)
+ , HsigShapeMismatchReason(..)
) where
import GHC.Prelude
@@ -105,6 +106,7 @@ import GHC.Tc.Types.Origin ( CtOrigin (ProvCtxtOrigin), SkolemInfoAnon (SigSkol)
, FixedRuntimeRepOrigin(..) )
import GHC.Tc.Types.Rank (Rank)
import GHC.Tc.Utils.TcType (IllegalForeignTypeReason, TcType)
+import GHC.Types.Avail (AvailInfo)
import GHC.Types.Error
import GHC.Types.Hint (UntickedPromotedThing(..))
import GHC.Types.ForeignCall (CLabelString)
@@ -2239,10 +2241,39 @@ data TcRnMessage where
Test case:
bkpfail40
-}
-
TcRnIllegalHsigDefaultMethods :: !Name -- ^ 'Name' of the class
-> NE.NonEmpty (LHsBind GhcRn) -- ^ default methods
-> TcRnMessage
+
+ {-| TcRnHsigFixityMismatch is an error indicating that the fixity decl in a
+ Backpack signature file differs from the one in the source file for the same
+ operator.
+
+ Test cases:
+ bkpfail37, bkpfail38
+ -}
+ TcRnHsigFixityMismatch :: !TyThing -- ^ The operator whose fixity is defined
+ -> !Fixity -- ^ the fixity used in the source file
+ -> !Fixity -- ^ the fixity used in the signature
+ -> TcRnMessage
+
+ {-| TcRnHsigShapeMismatch is a group of errors related to mismatches between
+ backpack signatures.
+ -}
+ TcRnHsigShapeMismatch :: !HsigShapeMismatchReason
+ -> TcRnMessage
+
+ {-| TcRnHsigMissingModuleExport is an error indicating that a module doesn't
+ export a name exported by its signature.
+
+ Test cases:
+ bkpfail01, bkpfail05, bkpfail09, bkpfail16, bkpfail35, bkpcabal06
+ -}
+ TcRnHsigMissingModuleExport :: !OccName -- ^ The missing name
+ -> !UnitState -- ^ The module's unit state
+ -> !Module -- ^ The implementation module
+ -> TcRnMessage
+
{-| TcRnBadGenericMethod
This test ensures that if you provide a "more specific" type signatures
for the default method, you must also provide a binding.
@@ -4419,3 +4450,24 @@ data NonStandardGuards where
data RuleLhsErrReason
= UnboundVariable RdrName NotInScopeError
| IllegalExpression
+
+data HsigShapeMismatchReason =
+ {-| HsigShapeSortMismatch is an error indicating that an item in the
+ export list of a signature doesn't match the item of the same name in
+ another signature when merging the two – one is a type while the other is a
+ plain identifier.
+
+ Test cases:
+ none
+ -}
+ HsigShapeSortMismatch !AvailInfo !AvailInfo
+ |
+ {-| HsigShapeNotUnifiable is an error indicating that a name in the
+ export list of a signature cannot be unified with a name of the same name in
+ another signature when merging the two.
+
+ Test cases:
+ bkpfail20, bkpfail21
+ -}
+ HsigShapeNotUnifiable !Name !Name !Bool
+ deriving (Generic)
diff --git a/compiler/GHC/Tc/Utils/Backpack.hs b/compiler/GHC/Tc/Utils/Backpack.hs
index f11b900d6e..bc70d18684 100644
--- a/compiler/GHC/Tc/Utils/Backpack.hs
+++ b/compiler/GHC/Tc/Utils/Backpack.hs
@@ -88,21 +88,6 @@ import Data.List (find)
import {-# SOURCE #-} GHC.Tc.Module
-
-fixityMisMatch :: TyThing -> Fixity -> Fixity -> TcRnMessage
-fixityMisMatch real_thing real_fixity sig_fixity =
- mkTcRnUnknownMessage $ mkPlainError noHints $
- vcat [ppr real_thing <+> text "has conflicting fixities in the module",
- text "and its hsig file",
- text "Main module:" <+> ppr_fix real_fixity,
- text "Hsig file:" <+> ppr_fix sig_fixity]
- where
- ppr_fix f =
- ppr f <+>
- (if f == defaultFixity
- then parens (text "default")
- else empty)
-
checkHsigDeclM :: ModIface -> TyThing -> TyThing -> TcRn ()
checkHsigDeclM sig_iface sig_thing real_thing = do
let name = getName real_thing
@@ -115,7 +100,7 @@ checkHsigDeclM sig_iface sig_thing real_thing = do
Just f -> f
when (real_fixity /= sig_fixity) $
addErrAt (nameSrcSpan name)
- (fixityMisMatch real_thing real_fixity sig_fixity)
+ (TcRnHsigFixityMismatch real_thing real_fixity sig_fixity)
-- | Given a 'ModDetails' of an instantiated signature (note that the
-- 'ModDetails' must be knot-tied consistently with the actual implementation)
@@ -677,7 +662,7 @@ mergeSignatures
-- 3(d). Extend the name substitution (performing shaping)
mb_r <- extend_ns nsubst as2
case mb_r of
- Left err -> failWithTc (mkTcRnUnknownMessage $ mkPlainError noHints err)
+ Left err -> failWithTc (TcRnHsigShapeMismatch err)
Right nsubst' -> return (nsubst',oks',(imod, thinned_iface):ifaces)
nsubst0 = mkNameShape (moduleName inner_mod) (mi_exports lcl_iface0)
ok_to_use0 = mkOccSet (exportOccs (mi_exports lcl_iface0))
@@ -1004,10 +989,7 @@ checkImplements impl_mod req_mod@(Module uid mod_name) = do
-- we need. (Notice we IGNORE the Modules in the AvailInfos.)
forM_ (exportOccs (mi_exports isig_iface)) $ \occ ->
case lookupGlobalRdrEnv impl_gr occ of
- [] -> addErr $ mkTcRnUnknownMessage $ mkPlainError noHints $
- quotes (ppr occ)
- <+> text "is exported by the hsig file, but not exported by the implementing module"
- <+> quotes (pprWithUnitState unit_state $ ppr impl_mod)
+ [] -> addErr $ TcRnHsigMissingModuleExport occ unit_state impl_mod
_ -> return ()
failIfErrsM
diff --git a/compiler/GHC/Types/Error/Codes.hs b/compiler/GHC/Types/Error/Codes.hs
index dca0923ce7..bc991393c4 100644
--- a/compiler/GHC/Types/Error/Codes.hs
+++ b/compiler/GHC/Types/Error/Codes.hs
@@ -471,6 +471,11 @@ type family GhcDiagnosticCode c = n | n -> c where
GhcDiagnosticCode "TcRnIllegalTypeOperatorDecl" = 50649
GhcDiagnosticCode "TcRnIllegalHsigDefaultMethods" = 93006
+ GhcDiagnosticCode "TcRnHsigFixityMismatch" = 93007
+ GhcDiagnosticCode "HsigShapeSortMismatch" = 93008
+ GhcDiagnosticCode "HsigShapeNotUnifiable" = 93009
+ GhcDiagnosticCode "TcRnHsigNoIface" = 93010
+ GhcDiagnosticCode "TcRnHsigMissingModuleExport" = 93011
GhcDiagnosticCode "TcRnBadGenericMethod" = 59794
GhcDiagnosticCode "TcRnWarningMinimalDefIncomplete" = 13511
GhcDiagnosticCode "TcRnDefaultMethodForPragmaLacksBinding" = 28587
@@ -691,6 +696,7 @@ type family ConRecursInto con where
ConRecursInto "TcRnPragmaWarning" = 'Just (WarningTxt GhcRn)
ConRecursInto "TcRnNotInScope" = 'Just NotInScopeError
ConRecursInto "TcRnIllegalNewtype" = 'Just IllegalNewtypeReason
+ ConRecursInto "TcRnHsigShapeMismatch" = 'Just HsigShapeMismatchReason
--
-- TH errors
diff --git a/compiler/GHC/Types/Name/Shape.hs b/compiler/GHC/Types/Name/Shape.hs
index 5e134001c1..19e97ef2c6 100644
--- a/compiler/GHC/Types/Name/Shape.hs
+++ b/compiler/GHC/Types/Name/Shape.hs
@@ -25,8 +25,8 @@ import GHC.Types.Name.Env
import GHC.Tc.Utils.Monad
import GHC.Iface.Env
+import GHC.Tc.Errors.Types
-import GHC.Utils.Outputable
import GHC.Utils.Panic.Plain
import Control.Monad
@@ -106,7 +106,7 @@ mkNameShape mod_name as =
-- restricted notion of shaping than in Backpack'14: we do shaping
-- *as* we do type-checking. Thus, once we shape a signature, its
-- exports are *final* and we're not allowed to refine them further,
-extendNameShape :: HscEnv -> NameShape -> [AvailInfo] -> IO (Either SDoc NameShape)
+extendNameShape :: HscEnv -> NameShape -> [AvailInfo] -> IO (Either HsigShapeMismatchReason NameShape)
extendNameShape hsc_env ns as =
case uAvailInfos (ns_mod_name ns) (ns_exports ns) as of
Left err -> return (Left err)
@@ -224,7 +224,7 @@ mergeAvails as1 as2 =
-- | Unify two lists of 'AvailInfo's, given an existing substitution @subst@,
-- with only name holes from @flexi@ unifiable (all other name holes rigid.)
-uAvailInfos :: ModuleName -> [AvailInfo] -> [AvailInfo] -> Either SDoc ShNameSubst
+uAvailInfos :: ModuleName -> [AvailInfo] -> [AvailInfo] -> Either HsigShapeMismatchReason ShNameSubst
uAvailInfos flexi as1 as2 = -- pprTrace "uAvailInfos" (ppr as1 $$ ppr as2) $
let mkOE as = listToUFM $ do a <- as
n <- availNames a
@@ -236,34 +236,27 @@ uAvailInfos flexi as1 as2 = -- pprTrace "uAvailInfos" (ppr as1 $$ ppr as2) $
-- | Unify two 'AvailInfo's, given an existing substitution @subst@,
-- with only name holes from @flexi@ unifiable (all other name holes rigid.)
uAvailInfo :: ModuleName -> ShNameSubst -> AvailInfo -> AvailInfo
- -> Either SDoc ShNameSubst
+ -> Either HsigShapeMismatchReason ShNameSubst
uAvailInfo flexi subst (Avail (NormalGreName n1)) (Avail (NormalGreName n2)) = uName flexi subst n1 n2
uAvailInfo flexi subst (AvailTC n1 _) (AvailTC n2 _) = uName flexi subst n1 n2
-uAvailInfo _ _ a1 a2 = Left $ text "While merging export lists, could not combine"
- <+> ppr a1 <+> text "with" <+> ppr a2
- <+> parens (text "one is a type, the other is a plain identifier")
+uAvailInfo _ _ a1 a2 = Left $ HsigShapeSortMismatch a1 a2
-- | Unify two 'Name's, given an existing substitution @subst@,
-- with only name holes from @flexi@ unifiable (all other name holes rigid.)
-uName :: ModuleName -> ShNameSubst -> Name -> Name -> Either SDoc ShNameSubst
+uName :: ModuleName -> ShNameSubst -> Name -> Name -> Either HsigShapeMismatchReason ShNameSubst
uName flexi subst n1 n2
| n1 == n2 = Right subst
| isFlexi n1 = uHoleName flexi subst n1 n2
| isFlexi n2 = uHoleName flexi subst n2 n1
- | otherwise = Left (text "While merging export lists, could not unify"
- <+> ppr n1 <+> text "with" <+> ppr n2 $$ extra)
+ | otherwise = Left (HsigShapeNotUnifiable n1 n2 (isHoleName n1 || isHoleName n2))
where
isFlexi n = isHoleName n && moduleName (nameModule n) == flexi
- extra | isHoleName n1 || isHoleName n2
- = text "Neither name variable originates from the current signature."
- | otherwise
- = empty
-- | Unify a name @h@ which 'isHoleName' with another name, given an existing
-- substitution @subst@, with only name holes from @flexi@ unifiable (all
-- other name holes rigid.)
uHoleName :: ModuleName -> ShNameSubst -> Name {- hole name -} -> Name
- -> Either SDoc ShNameSubst
+ -> Either HsigShapeMismatchReason ShNameSubst
uHoleName flexi subst h n =
assert (isHoleName h) $
case lookupNameEnv subst h of
diff --git a/testsuite/tests/backpack/cabal/bkpcabal06/bkpcabal06.stderr b/testsuite/tests/backpack/cabal/bkpcabal06/bkpcabal06.stderr
index a266829205..24defef3c5 100644
--- a/testsuite/tests/backpack/cabal/bkpcabal06/bkpcabal06.stderr
+++ b/testsuite/tests/backpack/cabal/bkpcabal06/bkpcabal06.stderr
@@ -1,4 +1,4 @@
-sig/P.hsig:1:1: error:
+sig/P.hsig:1:1: error: [GHC-93011]
• ‘p’ is exported by the hsig file, but not exported by the implementing module ‘bkpcabal06-0.1.0.0:impl:P’
• while checking that bkpcabal06-0.1.0.0:impl:P implements signature P in bkpcabal06-0.1.0.0:sig[P=bkpcabal06-0.1.0.0:impl:P]
diff --git a/testsuite/tests/backpack/should_fail/bkpfail01.stderr b/testsuite/tests/backpack/should_fail/bkpfail01.stderr
index e88d122fa4..7197fa3eb2 100644
--- a/testsuite/tests/backpack/should_fail/bkpfail01.stderr
+++ b/testsuite/tests/backpack/should_fail/bkpfail01.stderr
@@ -10,10 +10,10 @@
Instantiating p[H=q:H]
[1 of 2] Compiling H[sig] ( p/H.hsig, nothing )
-bkpfail01.out/p/p-D5Mg3foBSCrDbQDKH4WGSG/../H.hi:1:1: error:
+bkpfail01.out/p/p-D5Mg3foBSCrDbQDKH4WGSG/../H.hi:1:1: error: [GHC-93011]
• ‘H’ is exported by the hsig file, but not exported by the implementing module ‘q:H’
• while checking that q:H implements signature H in p[H=q:H]
-bkpfail01.out/p/p-D5Mg3foBSCrDbQDKH4WGSG/../H.hi:1:1: error:
+bkpfail01.out/p/p-D5Mg3foBSCrDbQDKH4WGSG/../H.hi:1:1: error: [GHC-93011]
• ‘H’ is exported by the hsig file, but not exported by the implementing module ‘q:H’
• while checking that q:H implements signature H in p[H=q:H]
diff --git a/testsuite/tests/backpack/should_fail/bkpfail05.stderr b/testsuite/tests/backpack/should_fail/bkpfail05.stderr
index da996cfb7e..c07426fc6b 100644
--- a/testsuite/tests/backpack/should_fail/bkpfail05.stderr
+++ b/testsuite/tests/backpack/should_fail/bkpfail05.stderr
@@ -18,6 +18,6 @@
Instantiating h[H=h-impl:H]
[1 of 1] Compiling H[sig] ( h/H.hsig, bkpfail05.out/h/h-5FYQgnNkfSvBT5yogOxPpf/H.o )
-bkpfail05.out/h/h-5FYQgnNkfSvBT5yogOxPpf/../H.hi:1:1: error:
+bkpfail05.out/h/h-5FYQgnNkfSvBT5yogOxPpf/../H.hi:1:1: error: [GHC-93011]
• ‘T1’ is exported by the hsig file, but not exported by the implementing module ‘h-impl:H’
• while checking that h-impl:H implements signature H in h[H=h-impl:H]
diff --git a/testsuite/tests/backpack/should_fail/bkpfail09.stderr b/testsuite/tests/backpack/should_fail/bkpfail09.stderr
index de1d100a34..858f292001 100644
--- a/testsuite/tests/backpack/should_fail/bkpfail09.stderr
+++ b/testsuite/tests/backpack/should_fail/bkpfail09.stderr
@@ -8,10 +8,10 @@
[1 of 3] Compiling H2[sig] ( r/H2.hsig, nothing )
[2 of 3] Instantiating p
-Command line argument: -unit-id p[H=H]:0:0: error:
+Command line argument: -unit-id p[H=H]:0:0: error: [GHC-93011]
• ‘H’ is exported by the hsig file, but not exported by the implementing module ‘q:H’
• while checking that q:H implements signature H in p[H=q:H]
-Command line argument: -unit-id p[H=H]:0:0: error:
+Command line argument: -unit-id p[H=H]:0:0: error: [GHC-93011]
• ‘H’ is exported by the hsig file, but not exported by the implementing module ‘q:H’
• while checking that q:H implements signature H in p[H=q:H]
diff --git a/testsuite/tests/backpack/should_fail/bkpfail16.stderr b/testsuite/tests/backpack/should_fail/bkpfail16.stderr
index b3bea76954..af4d241106 100644
--- a/testsuite/tests/backpack/should_fail/bkpfail16.stderr
+++ b/testsuite/tests/backpack/should_fail/bkpfail16.stderr
@@ -6,6 +6,6 @@
Instantiating p[ShouldFail=base-4.13.0.0:Data.Bool]
[1 of 1] Compiling ShouldFail[sig] ( p/ShouldFail.hsig, bkpfail16.out/p/p-1OqLaT7dAn947wScQQKCw5/ShouldFail.o )
-bkpfail16.out/p/p-1OqLaT7dAn947wScQQKCw5/../ShouldFail.hi:1:1: error:
+bkpfail16.out/p/p-1OqLaT7dAn947wScQQKCw5/../ShouldFail.hi:1:1: error: [GHC-93011]
• ‘Booly’ is exported by the hsig file, but not exported by the implementing module ‘Data.Bool’
• while checking that Data.Bool implements signature ShouldFail in p[ShouldFail=Data.Bool]
diff --git a/testsuite/tests/backpack/should_fail/bkpfail20.stderr b/testsuite/tests/backpack/should_fail/bkpfail20.stderr
index bd450f9f8c..799d58a44b 100644
--- a/testsuite/tests/backpack/should_fail/bkpfail20.stderr
+++ b/testsuite/tests/backpack/should_fail/bkpfail20.stderr
@@ -5,7 +5,7 @@
[3 of 3] Processing r
[1 of 3] Compiling B[sig] ( r/B.hsig, nothing )
-bkpfail20.bkp:1:1: error:
+bkpfail20.bkp:1:1: error: [GHC-93009]
• While merging export lists, could not unify Data.STRef.Lazy.newSTRef with GHC.STRef.newSTRef
• while merging the signatures from:
• p[A=<B>]:A
diff --git a/testsuite/tests/backpack/should_fail/bkpfail21.stderr b/testsuite/tests/backpack/should_fail/bkpfail21.stderr
index bc40bbc344..72444b2fd2 100644
--- a/testsuite/tests/backpack/should_fail/bkpfail21.stderr
+++ b/testsuite/tests/backpack/should_fail/bkpfail21.stderr
@@ -9,7 +9,7 @@
[2 of 5] Compiling H1[sig] ( r/H1.hsig, nothing )
[3 of 5] Compiling H3[sig] ( r/H3.hsig, nothing )
-bkpfail21.bkp:1:1: error:
+bkpfail21.bkp:1:1: error: [GHC-93009]
• While merging export lists, could not unify {H1.T} with {H2.T}
Neither name variable originates from the current signature.
• while merging the signatures from:
diff --git a/testsuite/tests/backpack/should_fail/bkpfail35.stderr b/testsuite/tests/backpack/should_fail/bkpfail35.stderr
index 893a8dd2ae..f72bd23184 100644
--- a/testsuite/tests/backpack/should_fail/bkpfail35.stderr
+++ b/testsuite/tests/backpack/should_fail/bkpfail35.stderr
@@ -13,6 +13,6 @@
Instantiating q[A=aimpl:A]
[1 of 1] Compiling A[sig] ( q/A.hsig, bkpfail35.out/q/q-E72T6bb4XRkIeTPWK2mCKa/A.o )
-bkpfail35.out/q/q-E72T6bb4XRkIeTPWK2mCKa/../A.hi:1:1: error:
+bkpfail35.out/q/q-E72T6bb4XRkIeTPWK2mCKa/../A.hi:1:1: error: [GHC-93011]
• ‘y’ is exported by the hsig file, but not exported by the implementing module ‘aimpl:A’
• while checking that aimpl:A implements signature A in q[A=aimpl:A]
diff --git a/testsuite/tests/backpack/should_fail/bkpfail37.stderr b/testsuite/tests/backpack/should_fail/bkpfail37.stderr
index a10c05fbeb..4158517b28 100644
--- a/testsuite/tests/backpack/should_fail/bkpfail37.stderr
+++ b/testsuite/tests/backpack/should_fail/bkpfail37.stderr
@@ -9,7 +9,7 @@
Instantiating p[A=q:A]
[1 of 1] Compiling A[sig] ( p/A.hsig, bkpfail37.out/p/p-HVmFlcYSefiK5n1aDP1v7x/A.o )
-bkpfail37.bkp:9:9: error:
+bkpfail37.bkp:9:9: error: [GHC-93007]
• Identifier ‘op’ has conflicting fixities in the module
and its hsig file
Main module: infixr 4
diff --git a/testsuite/tests/backpack/should_fail/bkpfail38.stderr b/testsuite/tests/backpack/should_fail/bkpfail38.stderr
index 264e150783..41c713925b 100644
--- a/testsuite/tests/backpack/should_fail/bkpfail38.stderr
+++ b/testsuite/tests/backpack/should_fail/bkpfail38.stderr
@@ -5,7 +5,7 @@
[3 of 3] Processing r
[1 of 3] Compiling A[sig] ( r/A.hsig, nothing )
-bkpfail38.bkp:8:9: error:
+bkpfail38.bkp:8:9: error: [GHC-93007]
• Identifier ‘op’ has conflicting fixities in the module
and its hsig file
Main module: infixr 4