Improve SPECIALIZE pragma error messages (Fixes #12126)
authorAlina Banerjee <alina@glitchgirl.us>
Sat, 2 Nov 2019 01:34:28 +0000 (01:34 +0000)
committerMarge Bot <ben+marge-bot@smart-cactus.org>
Sun, 10 Nov 2019 06:06:12 +0000 (01:06 -0500)
compiler/GHC/Hs/Binds.hs
compiler/typecheck/TcInstDcls.hs
compiler/typecheck/TcOrigin.hs
compiler/typecheck/TcSigs.hs
testsuite/tests/parser/should_fail/T7848.stderr
testsuite/tests/rename/should_fail/Misplaced.stderr

index 3089f04..68b9f00 100644 (file)
@@ -1151,9 +1151,11 @@ hsSigDoc (ClassOpSig _ is_deflt _ _)
  | is_deflt                     = text "default type signature"
  | otherwise                    = text "class method signature"
 hsSigDoc (IdSig {})             = text "id signature"
-hsSigDoc (SpecSig {})           = text "SPECIALISE pragma"
+hsSigDoc (SpecSig _ _ _ inl)
+                                = ppr inl <+> text "pragma"
 hsSigDoc (InlineSig _ _ prag)   = ppr (inlinePragmaSpec prag) <+> text "pragma"
-hsSigDoc (SpecInstSig {})       = text "SPECIALISE instance pragma"
+hsSigDoc (SpecInstSig _ src _)
+                                = pprWithSourceText src empty <+> text "instance pragma"
 hsSigDoc (FixSig {})            = text "fixity declaration"
 hsSigDoc (MinimalSig {})        = text "MINIMAL pragma"
 hsSigDoc (SCCFunSig {})         = text "SCC pragma"
@@ -1187,7 +1189,7 @@ ppr_sig (InlineSig _ var inl)
   = pragSrcBrackets (inl_src inl) "{-# INLINE"  (pprInline inl
                                    <+> pprPrefixOcc (unLoc var))
 ppr_sig (SpecInstSig _ src ty)
-  = pragSrcBrackets src "{-# SPECIALISE" (text "instance" <+> ppr ty)
+  = pragSrcBrackets src "{-# pragma" (text "instance" <+> ppr ty)
 ppr_sig (MinimalSig _ src bf)
   = pragSrcBrackets src "{-# MINIMAL" (pprMinimalSig bf)
 ppr_sig (PatSynSig _ names sig_ty)
index 16150df..ff71a6f 100644 (file)
@@ -2133,7 +2133,7 @@ tcSpecInst dfun_id prag@(SpecInstSig _ _ hs_ty)
         ; co_fn <- tcSpecWrapper SpecInstCtxt (idType dfun_id) spec_dfun_ty
         ; return (SpecPrag dfun_id co_fn defaultInlinePragma) }
   where
-    spec_ctxt prag = hang (text "In the SPECIALISE pragma") 2 (ppr prag)
+    spec_ctxt prag = hang (text "In the pragma:") 2 (ppr prag)
 
 tcSpecInst _  _ = panic "tcSpecInst"
 
index 43bf617..5a33300 100644 (file)
@@ -547,7 +547,7 @@ pprCtOrigin (GivenOrigin sk) = ctoHerald <+> ppr sk
 
 pprCtOrigin (SpecPragOrigin ctxt)
   = case ctxt of
-       FunSigCtxt n _ -> text "a SPECIALISE pragma for" <+> quotes (ppr n)
+       FunSigCtxt n _ -> text "for" <+> quotes (ppr n)
        SpecInstCtxt   -> text "a SPECIALISE INSTANCE pragma"
        _              -> text "a SPECIALISE pragma"  -- Never happens I think
 
index 9d03576..b4ef967 100644 (file)
@@ -766,7 +766,7 @@ tcSpecPrag poly_id prag@(SpecSig _ fun_name hs_tys inl)
   where
     name      = idName poly_id
     poly_ty   = idType poly_id
-    spec_ctxt prag = hang (text "In the SPECIALISE pragma") 2 (ppr prag)
+    spec_ctxt prag = hang (text "In the pragma:") 2 (ppr prag)
 
     tc_one hs_ty
       = do { spec_ty <- tcHsSigType   (FunSigCtxt name False) hs_ty
index 413920d..9c80704 100644 (file)
@@ -5,7 +5,7 @@ T7848.hs:10:9: error:
         the type signature for:
           (&) :: forall a. a
         at T7848.hs:10:9-35
-    • In the SPECIALISE pragma {-# SPECIALIZE (&) :: a #-}
+    • In the pragma: {-# SPECIALIZE (&) :: a #-}
       In an equation for ‘x’:
           x (+) ((&)@z) ((:&&) a b) (c :&& d) (e `A` f) (A g h)
             = y
index 610281c..85f2d9e 100644 (file)
@@ -1,4 +1,4 @@
 
 Misplaced.hs:4:1: error:
-    Misplaced SPECIALISE instance pragma:
+    Misplaced {-# SPECIALISE instance pragma:
     {-# SPECIALISE instance Eq (T Int) #-}