[Git][ghc/ghc][wip/marge_bot_batch_merge_job] 4 commits: ci: bump ci-images for wasi-sdk upgrade
Marge Bot (@marge-bot)
gitlab at gitlab.haskell.org
Thu Nov 9 21:45:45 UTC 2023
Marge Bot pushed to branch wip/marge_bot_batch_merge_job at Glasgow Haskell Compiler / GHC
Commits:
18498538 by Cheng Shao at 2023-11-09T16:58:12+00:00
ci: bump ci-images for wasi-sdk upgrade
- - - - -
e72d2c02 by PHO at 2023-11-09T16:45:33-05:00
Don't assume the current locale is *.UTF-8, set the encoding explicitly
primops.txt contains Unicode characters:
> LC_ALL=C ./genprimopcode --data-decl < ./primops.txt
> genprimopcode: <stdin>: hGetContents: invalid argument (cannot decode byte sequence starting from 226)
Hadrian must also avoid using readFile' to read primops.txt because it
tries to decode the file with a locale-specific encoding.
- - - - -
1b41d4e3 by PHO at 2023-11-09T16:45:34-05:00
Use '[' instead of '[[' because the latter is a Bash-ism
It doesn't work on platforms where /bin/sh is something other than Bash.
- - - - -
b00fd698 by Simon Peyton Jones at 2023-11-09T16:45:35-05:00
Add an extra check in kcCheckDeclHeader_sig
Fix #24083 by checking for a implicitly-scoped type variable that is not
actually bound. See Note [Disconnected type variables] in GHC.Tc.Gen.HsType
For some reason, on aarch64-darwin we saw a 2.8% decrease in compiler
allocations for MultiLayerModulesTH_Make; but 0.0% on other architectures.
Metric Decrease:
MultiLayerModulesTH_Make
- - - - -
13 changed files:
- .gitlab-ci.yml
- compiler/GHC/Tc/Errors/Ppr.hs
- compiler/GHC/Tc/Errors/Types.hs
- compiler/GHC/Tc/Gen/HsType.hs
- compiler/GHC/Types/Error/Codes.hs
- compiler/GHC/Types/Hint.hs
- compiler/GHC/Types/Hint/Ppr.hs
- hadrian/src/Builder.hs
- rts/configure.ac
- + testsuite/tests/polykinds/T24083.hs
- + testsuite/tests/polykinds/T24083.stderr
- testsuite/tests/polykinds/all.T
- utils/genprimopcode/Main.hs
Changes:
=====================================
.gitlab-ci.yml
=====================================
@@ -2,7 +2,7 @@ variables:
GIT_SSL_NO_VERIFY: "1"
# Commit of ghc/ci-images repository from which to pull Docker images
- DOCKER_REV: a55d4ae0f9da0a2fb3bc72a13f356e2511a4c4fd
+ DOCKER_REV: cf2ba8e205bd41ac36f39e1a12b4727f899ded75
# Sequential version number of all cached things.
# Bump to invalidate GitLab CI cache.
=====================================
compiler/GHC/Tc/Errors/Ppr.hs
=====================================
@@ -999,6 +999,12 @@ instance Diagnostic TcRnMessage where
-- Note [Swizzling the tyvars before generaliseTcTyCon]
= vcat [ quotes (ppr n1) <+> text "bound at" <+> ppr (getSrcLoc n1)
, quotes (ppr n2) <+> text "bound at" <+> ppr (getSrcLoc n2) ]
+
+ TcRnDisconnectedTyVar n
+ -> mkSimpleDecorated $
+ hang (text "Scoped type variable only appears non-injectively in declaration header:")
+ 2 (quotes (ppr n) <+> text "bound at" <+> ppr (getSrcLoc n))
+
TcRnInvalidReturnKind data_sort allowed_kind kind _suggested_ext
-> mkSimpleDecorated $
sep [ ppDataSort data_sort <+>
@@ -2201,6 +2207,8 @@ instance Diagnostic TcRnMessage where
-> ErrorWithoutFlag
TcRnDifferentNamesForTyVar{}
-> ErrorWithoutFlag
+ TcRnDisconnectedTyVar{}
+ -> ErrorWithoutFlag
TcRnInvalidReturnKind{}
-> ErrorWithoutFlag
TcRnClassKindNotConstraint{}
@@ -2842,6 +2850,8 @@ instance Diagnostic TcRnMessage where
-> noHints
TcRnDifferentNamesForTyVar{}
-> noHints
+ TcRnDisconnectedTyVar n
+ -> [SuggestBindTyVarExplicitly n]
TcRnInvalidReturnKind _ _ _ mb_suggest_unlifted_ext
-> case mb_suggest_unlifted_ext of
Nothing -> noHints
=====================================
compiler/GHC/Tc/Errors/Types.hs
=====================================
@@ -2276,6 +2276,13 @@ data TcRnMessage where
-}
TcRnDifferentNamesForTyVar :: !Name -> !Name -> TcRnMessage
+ {-| TcRnDisconnectedTyVar is an error for a data declaration that has a kind signature,
+ where the implicitly-bound type type variables can't be matched up unambiguously
+ with the ones from the signature. See Note [Disconnected type variables] in
+ GHC.Tc.Gen.HsType.
+ -}
+ TcRnDisconnectedTyVar :: !Name -> TcRnMessage
+
{-| TcRnInvalidReturnKind is an error for a data declaration that has a kind signature
with an invalid result kind.
=====================================
compiler/GHC/Tc/Gen/HsType.hs
=====================================
@@ -2608,6 +2608,7 @@ kcCheckDeclHeader_sig sig_kind name flav
; implicit_tvs <- liftZonkM $ zonkTcTyVarsToTcTyVars implicit_tvs
; let implicit_prs = implicit_nms `zip` implicit_tvs
; checkForDuplicateScopedTyVars implicit_prs
+ ; checkForDisconnectedScopedTyVars all_tcbs implicit_prs
-- Swizzle the Names so that the TyCon uses the user-declared implicit names
-- E.g type T :: k -> Type
@@ -2621,11 +2622,11 @@ kcCheckDeclHeader_sig sig_kind name flav
all_tv_prs = mkTyVarNamePairs (binderVars swizzled_tcbs)
; traceTc "kcCheckDeclHeader swizzle" $ vcat
- [ text "implicit_prs = " <+> ppr implicit_prs
- , text "implicit_nms = " <+> ppr implicit_nms
- , text "hs_tv_bndrs = " <+> ppr hs_tv_bndrs
- , text "all_tcbs = " <+> pprTyVars (binderVars all_tcbs)
- , text "swizzled_tcbs = " <+> pprTyVars (binderVars swizzled_tcbs)
+ [ text "sig_tcbs =" <+> ppr sig_tcbs
+ , text "implicit_prs =" <+> ppr implicit_prs
+ , text "hs_tv_bndrs =" <+> ppr hs_tv_bndrs
+ , text "all_tcbs =" <+> pprTyVars (binderVars all_tcbs)
+ , text "swizzled_tcbs =" <+> pprTyVars (binderVars swizzled_tcbs)
, text "tycon_res_kind =" <+> ppr tycon_res_kind
, text "swizzled_kind =" <+> ppr swizzled_kind ]
@@ -2963,6 +2964,22 @@ expectedKindInCtxt _ = OpenKind
* *
********************************************************************* -}
+checkForDisconnectedScopedTyVars :: [TcTyConBinder] -> [(Name,TcTyVar)] -> TcM ()
+-- See Note [Disconnected type variables]
+-- `scoped_prs` is the mapping gotten by unifying
+-- - the standalone kind signature for T, with
+-- - the header of the type/class declaration for T
+checkForDisconnectedScopedTyVars sig_tcbs scoped_prs
+ = mapM_ report_disconnected (filterOut ok scoped_prs)
+ where
+ sig_tvs = mkVarSet (binderVars sig_tcbs)
+ ok (_, tc_tv) = tc_tv `elemVarSet` sig_tvs
+
+ report_disconnected :: (Name,TcTyVar) -> TcM ()
+ report_disconnected (nm, _)
+ = setSrcSpan (getSrcSpan nm) $
+ addErrTc $ TcRnDisconnectedTyVar nm
+
checkForDuplicateScopedTyVars :: [(Name,TcTyVar)] -> TcM ()
-- Check for duplicates
-- E.g. data SameKind (a::k) (b::k)
@@ -2993,6 +3010,45 @@ checkForDuplicateScopedTyVars scoped_prs
addErrTc $ TcRnDifferentNamesForTyVar n1 n2
+{- Note [Disconnected type variables]
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+This note applies when kind-checking the header of a type/class decl that has
+a separate, standalone kind signature. See #24083.
+
+Consider:
+ type S a = Type
+
+ type C :: forall k. S k -> Constraint
+ class C (a :: S kk) where
+ op :: ...kk...
+
+Note that the class has a separate kind signature, so the elaborated decl should
+look like
+ class C @kk (a :: S kk) where ...
+
+But how can we "connect up" the scoped variable `kk` with the skolem kind from the
+standalone kind signature for `C`? In general we do this by unifying the two.
+For example
+ type T k = (k,Type)
+ type W :: forall k. T k -> Type
+ data W (a :: (x,Type)) = ..blah blah..
+
+When we encounter (a :: (x,Type)) we unify the kind (x,Type) with the kind (T k)
+from the standalone kind signature. Of course, unification looks through synonyms
+so we end up with the mapping [x :-> k] that connects the scoped type variable `x`
+with the kind from the signature.
+
+But in our earlier example this unification is ineffective -- because `S` is a
+phantom synonym that just discards its argument. So our plan is this:
+
+ if matchUpSigWithDecl fails to connect `kk with `k`, by unification,
+ we give up and complain about a "disconnected" type variable.
+
+See #24083 for dicussion of alternatives, none satisfactory. Also the fix is
+easy: just add an explicit `@kk` parameter to the declaration, to bind `kk`
+explicitly, rather than binding it implicitly via unification.
+-}
+
{- *********************************************************************
* *
Bringing type variables into scope
=====================================
compiler/GHC/Types/Error/Codes.hs
=====================================
@@ -477,6 +477,7 @@ type family GhcDiagnosticCode c = n | n -> c where
GhcDiagnosticCode "TcRnInvalidVisibleKindArgument" = 20967
GhcDiagnosticCode "TcRnTooManyBinders" = 05989
GhcDiagnosticCode "TcRnDifferentNamesForTyVar" = 17370
+ GhcDiagnosticCode "TcRnDisconnectedTyVar" = 59738
GhcDiagnosticCode "TcRnInvalidReturnKind" = 55233
GhcDiagnosticCode "TcRnClassKindNotConstraint" = 80768
GhcDiagnosticCode "TcRnMatchesHaveDiffNumArgs" = 91938
=====================================
compiler/GHC/Types/Hint.hs
=====================================
@@ -480,6 +480,10 @@ data GhcHint
{-| Suggest explicitly quantifying a type variable instead of relying on implicit quantification -}
| SuggestExplicitQuantification RdrName
+
+ {-| Suggest binding explicitly; e.g data T @k (a :: F k) = .... -}
+ | SuggestBindTyVarExplicitly Name
+
-- | An 'InstantiationSuggestion' for a '.hsig' file. This is generated
-- by GHC in case of a 'DriverUnexpectedSignature' and suggests a way
-- to instantiate a particular signature, where the first argument is
=====================================
compiler/GHC/Types/Hint/Ppr.hs
=====================================
@@ -271,6 +271,9 @@ instance Outputable GhcHint where
SuggestExplicitQuantification tv
-> hsep [ text "Use an explicit", quotes (text "forall")
, text "to quantify over", quotes (ppr tv) ]
+ SuggestBindTyVarExplicitly tv
+ -> text "bind" <+> quotes (ppr tv)
+ <+> text "explicitly with" <+> quotes (char '@' <> ppr tv)
perhapsAsPat :: SDoc
perhapsAsPat = text "Perhaps you meant an as-pattern, which must not be surrounded by whitespace"
=====================================
hadrian/src/Builder.hs
=====================================
@@ -333,8 +333,8 @@ instance H.Builder Builder where
GenApply -> captureStdout
GenPrimopCode -> do
- stdin <- readFile' input
- Stdout stdout <- cmd' (Stdin stdin) [path] buildArgs buildOptions
+ need [input]
+ Stdout stdout <- cmd' (FileStdin input) [path] buildArgs buildOptions
-- see Note [Capture stdout as a ByteString]
writeFileChangedBS output stdout
=====================================
rts/configure.ac
=====================================
@@ -408,7 +408,7 @@ dnl See Note [Undefined symbols in the RTS]
[
symbolExtraDefs=''
-if [[ "$CABAL_FLAG_find_ptr" = 1 ]]; then
+if [ "$CABAL_FLAG_find_ptr" = 1 ]; then
symbolExtraDefs+=' -DFIND_PTR'
fi
@@ -418,7 +418,7 @@ cat $srcdir/external-symbols.list.in \
> external-symbols.list \
|| exit 1
-if [[ "$CABAL_FLAG_leading_underscore" = 1 ]]; then
+if [ "$CABAL_FLAG_leading_underscore" = 1 ]; then
sedExpr='s/^(.*)$/ "-Wl,-u,_\1"/'
else
sedExpr='s/^(.*)$/ "-Wl,-u,\1"/'
=====================================
testsuite/tests/polykinds/T24083.hs
=====================================
@@ -0,0 +1,14 @@
+{-# LANGUAGE StandaloneKindSignatures #-}
+{-# LANGUAGE TypeFamilies #-}
+
+module T24083 where
+import Data.Kind (Constraint, Type)
+
+data family Pi t :: Type
+
+type FunctionSymbol :: Type -> Type
+type FunctionSymbol t = Type
+
+type IsSum :: forall s. FunctionSymbol s -> Constraint
+class IsSum (sumf :: FunctionSymbol t) where
+ sumConNames :: Pi t
=====================================
testsuite/tests/polykinds/T24083.stderr
=====================================
@@ -0,0 +1,6 @@
+
+T24083.hs:13:14: error: [GHC-59738]
+ • Scoped type variable only appears non-injectively in declaration header:
+ ‘t’ bound at T24083.hs:13:14
+ • In the class declaration for ‘IsSum’
+ Suggested fix: bind ‘t’ explicitly with ‘@t’
=====================================
testsuite/tests/polykinds/all.T
=====================================
@@ -243,3 +243,4 @@ test('T22379b', normal, compile, [''])
test('T22743', normal, compile_fail, [''])
test('T22742', normal, compile_fail, [''])
test('T22793', normal, compile_fail, [''])
+test('T24083', normal, compile_fail, [''])
=====================================
utils/genprimopcode/Main.hs
=====================================
@@ -13,6 +13,7 @@ import Data.Char
import Data.List (union, intersperse, intercalate, nub)
import Data.Maybe ( catMaybes )
import System.Environment ( getArgs )
+import System.IO ( hSetEncoding, stdin, stdout, utf8 )
vecOptions :: Entry -> [(String,String,Int)]
vecOptions i =
@@ -116,7 +117,9 @@ main = getArgs >>= \args ->
++ unlines (map (" "++) known_args)
)
else
- do s <- getContents
+ do hSetEncoding stdin utf8 -- The input file is in UTF-8. Set the encoding explicitly.
+ hSetEncoding stdout utf8
+ s <- getContents
case parse s of
Left err -> error ("parse error at " ++ (show err))
Right p_o_specs@(Info _ _)
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/eb9a8b969590358fa718fe9e7d4626ac29932074...b00fd69815e01806fc591203a2ac25733ee1dc71
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/eb9a8b969590358fa718fe9e7d4626ac29932074...b00fd69815e01806fc591203a2ac25733ee1dc71
You're receiving this email because of your account on gitlab.haskell.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-commits/attachments/20231109/ebf1a74a/attachment-0001.html>
More information about the ghc-commits
mailing list