[Git][ghc/ghc][wip/T18723] WIP: Check for large tuples more thoroughly in the typechecker

Ryan Scott gitlab at gitlab.haskell.org
Fri Oct 16 14:50:21 UTC 2020



Ryan Scott pushed to branch wip/T18723 at Glasgow Haskell Compiler / GHC


Commits:
36b1df64 by Ryan Scott at 2020-10-16T10:48:57-04:00
WIP: Check for large tuples more thoroughly in the typechecker

This unifies the treatment of how GHC checks for constraint tuples
and other tuples by:

* Migrating the `checkTupSize` renamer check to the typechecker,
* Moving the existing `bigConstraintTuple` typechecker validity
  check to `checkCTupSize` for consistency with `checkTupSize`, and
* Consistently using `check(C)TupSize` when typechecking tuple
  names, expressions, patterns, and types.

While I was in town, I also removed the `HsConstraintTuple` and
`HsBoxedTuple` constructors of `HsTupleSort`, which are functionally
unused. This a `haddock` submodule bump.

Fixes #18723.

- - - - -


26 changed files:

- compiler/GHC/Hs/Type.hs
- compiler/GHC/Iface/Load.hs
- compiler/GHC/Rename/Env.hs
- compiler/GHC/Rename/Expr.hs
- compiler/GHC/Rename/Pat.hs
- compiler/GHC/Rename/Utils.hs
- compiler/GHC/Tc/Gen/Expr.hs
- compiler/GHC/Tc/Gen/HsType.hs
- compiler/GHC/Tc/Gen/Pat.hs
- testsuite/tests/polykinds/T10451.stderr
- − testsuite/tests/rename/should_fail/T6148.stderr
- + testsuite/tests/rename/should_fail/T6148a.hs
- + testsuite/tests/rename/should_fail/T6148a.stderr
- + testsuite/tests/rename/should_fail/T6148b.hs
- + testsuite/tests/rename/should_fail/T6148b.stderr
- testsuite/tests/rename/should_fail/T6148.hs → testsuite/tests/rename/should_fail/T6148c.hs
- + testsuite/tests/rename/should_fail/T6148c.stderr
- testsuite/tests/rename/should_fail/all.T
- + testsuite/tests/typecheck/should_fail/T18723a.hs
- + testsuite/tests/typecheck/should_fail/T18723a.stderr
- + testsuite/tests/typecheck/should_fail/T18723b.hs
- + testsuite/tests/typecheck/should_fail/T18723b.stderr
- + testsuite/tests/typecheck/should_fail/T18723c.hs
- + testsuite/tests/typecheck/should_fail/T18723c.stderr
- testsuite/tests/typecheck/should_fail/all.T
- utils/haddock


Changes:

=====================================
compiler/GHC/Hs/Type.hs
=====================================
@@ -1055,20 +1055,19 @@ namely HsTupleTy, but keep track of the tuple kind (in the first argument to
 HsTupleTy, a HsTupleSort). We can tell if a tuple is unboxed while parsing,
 because of the #. However, with -XConstraintKinds we can only distinguish
 between constraint and boxed tuples during type checking, in general. Hence the
-four constructors of HsTupleSort:
+two constructors of HsTupleSort:
 
         HsUnboxedTuple                  -> Produced by the parser
-        HsBoxedTuple                    -> Certainly a boxed tuple
-        HsConstraintTuple               -> Certainly a constraint tuple
         HsBoxedOrConstraintTuple        -> Could be a boxed or a constraint
                                         tuple. Produced by the parser only,
                                         disappears after type checking
+
+After typechecking, we use TupleSort (which clearly distinguishes between
+constraint tuples and boxed tuples) rather than HsTupleSort.
 -}
 
 -- | Haskell Tuple Sort
 data HsTupleSort = HsUnboxedTuple
-                 | HsBoxedTuple
-                 | HsConstraintTuple
                  | HsBoxedOrConstraintTuple
                  deriving Data
 
@@ -1986,11 +1985,9 @@ hsTypeNeedsParens p = go_hs_ty
     -- Special-case unary boxed tuple applications so that they are
     -- parenthesized as `Identity (Solo x)`, not `Identity Solo x` (#18612)
     -- See Note [One-tuples] in GHC.Builtin.Types
-    go_hs_ty (HsTupleTy _ con [L _ ty])
+    go_hs_ty (HsTupleTy _ con [_])
       = case con of
-          HsBoxedTuple               -> p >= appPrec
           HsBoxedOrConstraintTuple   -> p >= appPrec
-          HsConstraintTuple          -> go_hs_ty ty
           HsUnboxedTuple             -> False
     go_hs_ty (HsTupleTy{})            = False
     go_hs_ty (HsSumTy{})              = False


=====================================
compiler/GHC/Iface/Load.hs
=====================================
@@ -13,6 +13,7 @@ module GHC.Iface.Load (
         -- Importing one thing
         tcLookupImported_maybe, importDecl,
         checkWiredInTyCon, ifCheckWiredInThing,
+        checkTupSize, checkCTupSize,
 
         -- RnM/TcM functions
         loadModuleInterface, loadModuleInterfaces,
@@ -56,6 +57,8 @@ import GHC.Builtin.Names
 import GHC.Builtin.Utils
 import GHC.Builtin.PrimOps    ( allThePrimOps, primOpFixity, primOpOcc )
 import GHC.Types.Id.Make      ( seqId, EnableBignumRules(..) )
+import GHC.Core.ConLike
+import GHC.Core.DataCon
 import GHC.Core.Rules
 import GHC.Core.TyCon
 import GHC.Types.Annotations
@@ -78,7 +81,6 @@ import GHC.Utils.Misc
 import GHC.Data.FastString
 import GHC.Utils.Fingerprint
 import GHC.Driver.Hooks
-import GHC.Types.FieldLabel
 import GHC.Iface.Rename
 import GHC.Types.Unique.DSet
 import GHC.Driver.Plugins
@@ -133,9 +135,30 @@ tcImportDecl_maybe name
   = do  { when (needWiredInHomeIface thing)
                (initIfaceTcRn (loadWiredInHomeIface name))
                 -- See Note [Loading instances for wired-in things]
+          -- Error if attempting to use a prefix tuple name (,, ... ,,) that
+          -- exceeds mAX_TUPLE_SIZE.
+        ; whenIsJust (tuple_ty_thing_maybe thing) checkTupSize
         ; return (Succeeded thing) }
   | otherwise
   = initIfaceTcRn (importDecl name)
+  where
+    -- Returns @Just arity@ if the supplied TyThing corresponds to a tuple
+    -- type or data constructor. Returns @Nothing@ otherwise.
+    tuple_ty_thing_maybe :: TyThing -> Maybe Arity
+    tuple_ty_thing_maybe thing
+      | Just tycon <- case thing of
+                        ATyCon tc                 -> Just tc
+                        AConLike (RealDataCon dc) -> Just (dataConTyCon dc)
+                        _                         -> Nothing
+      , Just tupleSort <- tyConTuple_maybe tycon
+      = Just $ case tupleSort of
+          -- Unboxed tuples have twice as many arguments because of the
+          -- 'RuntimeRep's (#17837)
+          UnboxedTuple -> tyConArity tycon `div` 2
+          _ -> tyConArity tycon
+
+      | otherwise
+      = Nothing
 
 importDecl :: Name -> IfM lcl (MaybeErr MsgDoc TyThing)
 -- Get the TyThing for this Name from an interface file
@@ -249,6 +272,27 @@ needWiredInHomeIface :: TyThing -> Bool
 needWiredInHomeIface (ATyCon {}) = True
 needWiredInHomeIface _           = False
 
+-- | Ensure that a boxed or unboxed tuple has arity no larger than
+-- 'mAX_TUPLE_SIZE'.
+checkTupSize :: Int -> TcM ()
+checkTupSize tup_size
+  | tup_size <= mAX_TUPLE_SIZE
+  = return ()
+  | otherwise
+  = addErr (sep [text "A" <+> int tup_size <> ptext (sLit "-tuple is too large for GHC"),
+                 nest 2 (parens (text "max size is" <+> int mAX_TUPLE_SIZE)),
+                 nest 2 (text "Workaround: use nested tuples or define a data type")])
+
+-- | Ensure that a constraint tuple has arity no larger than 'mAX_CTUPLE_SIZE'.
+checkCTupSize :: Int -> TcM ()
+checkCTupSize tup_size
+  | tup_size <= mAX_CTUPLE_SIZE
+  = return ()
+  | otherwise
+  = addErr (hang (text "Constraint tuple arity too large:" <+> int tup_size
+                  <+> parens (text "max arity =" <+> int mAX_CTUPLE_SIZE))
+               2 (text "Instead, use a nested tuple"))
+
 
 {-
 ************************************************************************


=====================================
compiler/GHC/Rename/Env.hs
=====================================
@@ -72,7 +72,7 @@ import GHC.Core.DataCon
 import GHC.Core.TyCon
 import GHC.Utils.Error  ( MsgDoc )
 import GHC.Builtin.Names( rOOT_MAIN )
-import GHC.Types.Basic  ( pprWarningTxtForMsg, TopLevelFlag(..), TupleSort(..) )
+import GHC.Types.Basic  ( pprWarningTxtForMsg, TopLevelFlag(..) )
 import GHC.Types.SrcLoc as SrcLoc
 import GHC.Utils.Outputable as Outputable
 import GHC.Types.Unique.Set ( uniqSetAny )
@@ -280,20 +280,6 @@ lookupLocatedTopBndrRn = wrapLocM lookupTopBndrRn
 -- Note [Errors in lookup functions]
 lookupExactOcc_either :: Name -> RnM (Either MsgDoc Name)
 lookupExactOcc_either name
-  | Just thing <- wiredInNameTyThing_maybe name
-  , Just tycon <- case thing of
-                    ATyCon tc                 -> Just tc
-                    AConLike (RealDataCon dc) -> Just (dataConTyCon dc)
-                    _                         -> Nothing
-  , Just tupleSort <- tyConTuple_maybe tycon
-  = do { let tupArity = case tupleSort of
-               -- Unboxed tuples have twice as many arguments because of the
-               -- 'RuntimeRep's (#17837)
-               UnboxedTuple -> tyConArity tycon `div` 2
-               _ -> tyConArity tycon
-       ; checkTupSize tupArity
-       ; return (Right name) }
-
   | isExternalName name
   = return (Right name)
 


=====================================
compiler/GHC/Rename/Expr.hs
=====================================
@@ -281,7 +281,6 @@ rnExpr (ExplicitList x _  exps)
 
 rnExpr (ExplicitTuple x tup_args boxity)
   = do { checkTupleSection tup_args
-       ; checkTupSize (length tup_args)
        ; (tup_args', fvs) <- mapAndUnzipM rnTupArg tup_args
        ; return (ExplicitTuple x tup_args' boxity, plusFVs fvs) }
   where


=====================================
compiler/GHC/Rename/Pat.hs
=====================================
@@ -37,8 +37,8 @@ module GHC.Rename.Pat (-- main entry points
               -- Literals
               rnLit, rnOverLit,
 
-             -- Pattern Error messages that are also used elsewhere
-             checkTupSize, patSigErr
+             -- Pattern Error message that is also used elsewhere
+             patSigErr
              ) where
 
 -- ENH: thin imports to only what is necessary for patterns
@@ -59,7 +59,7 @@ import GHC.Rename.Utils    ( HsDocContext(..), newLocalBndrRn, bindLocalNames
                            , warnUnusedMatches, newLocalBndrRn
                            , checkUnusedRecordWildcard
                            , checkDupNames, checkDupAndShadowedNames
-                           , checkTupSize , unknownSubordinateErr )
+                           , unknownSubordinateErr )
 import GHC.Rename.HsType
 import GHC.Builtin.Names
 import GHC.Types.Name
@@ -497,8 +497,7 @@ rnPatAndThen mk (ListPat _ pats)
           False -> return (ListPat Nothing pats') }
 
 rnPatAndThen mk (TuplePat x pats boxed)
-  = do { liftCps $ checkTupSize (length pats)
-       ; pats' <- rnLPatsAndThen mk pats
+  = do { pats' <- rnLPatsAndThen mk pats
        ; return (TuplePat x pats' boxed) }
 
 rnPatAndThen mk (SumPat x pat alt arity)


=====================================
compiler/GHC/Rename/Utils.hs
=====================================
@@ -11,7 +11,6 @@ This module contains miscellaneous functions related to renaming.
 module GHC.Rename.Utils (
         checkDupRdrNames, checkShadowedRdrNames,
         checkDupNames, checkDupAndShadowedNames, dupNamesErr,
-        checkTupSize,
         addFvRn, mapFvRn, mapMaybeFvRn,
         warnUnusedMatches, warnUnusedTypePatterns,
         warnUnusedTopBinds, warnUnusedLocalBinds,
@@ -57,7 +56,6 @@ import GHC.Driver.Session
 import GHC.Data.FastString
 import Control.Monad
 import Data.List
-import GHC.Settings.Constants ( mAX_TUPLE_SIZE )
 import qualified Data.List.NonEmpty as NE
 import qualified GHC.LanguageExtensions as LangExt
 
@@ -572,15 +570,6 @@ typeAppErr what (L _ k)
             <+> quotes (char '@' <> ppr k))
        2 (text "Perhaps you intended to use TypeApplications")
 
-checkTupSize :: Int -> RnM ()
-checkTupSize tup_size
-  | tup_size <= mAX_TUPLE_SIZE
-  = return ()
-  | otherwise
-  = addErr (sep [text "A" <+> int tup_size <> ptext (sLit "-tuple is too large for GHC"),
-                 nest 2 (parens (text "max size is" <+> int mAX_TUPLE_SIZE)),
-                 nest 2 (text "Workaround: use nested tuples or define a data type")])
-
 
 {-
 ************************************************************************


=====================================
compiler/GHC/Tc/Gen/Expr.hs
=====================================
@@ -32,6 +32,7 @@ import GHC.Prelude
 import {-# SOURCE #-}   GHC.Tc.Gen.Splice( tcSpliceExpr, tcTypedBracket, tcUntypedBracket )
 
 import GHC.Hs
+import GHC.Iface.Load
 import GHC.Tc.Utils.Zonk
 import GHC.Tc.Utils.Monad
 import GHC.Tc.Utils.Unify
@@ -1035,7 +1036,9 @@ arithSeqEltType (Just fl) res_ty
 ----------------
 tcTupArgs :: [LHsTupArg GhcRn] -> [TcSigmaType] -> TcM [LHsTupArg GhcTc]
 tcTupArgs args tys
-  = ASSERT( equalLength args tys ) mapM go (args `zip` tys)
+  = do MASSERT( equalLength args tys )
+       checkTupSize (length args)
+       mapM go (args `zip` tys)
   where
     go (L l (Missing {}),     arg_ty) = do { mult <- newFlexiTyVarTy multiplicityTy
                                            ; return (L l (Missing (Scaled mult arg_ty))) }


=====================================
compiler/GHC/Tc/Gen/HsType.hs
=====================================
@@ -81,6 +81,7 @@ import GHC.Tc.Utils.TcMType
 import GHC.Tc.Validity
 import GHC.Tc.Utils.Unify
 import GHC.IfaceToCore
+import GHC.Iface.Load
 import GHC.Tc.Solver
 import GHC.Tc.Utils.Zonk
 import GHC.Core.TyCo.Rep
@@ -103,8 +104,6 @@ import GHC.Types.Var.Env
 import GHC.Builtin.Types
 import GHC.Types.Basic
 import GHC.Types.SrcLoc
-import GHC.Settings.Constants ( mAX_CTUPLE_SIZE )
-import GHC.Utils.Error( MsgDoc )
 import GHC.Types.Unique
 import GHC.Types.Unique.FM
 import GHC.Types.Unique.Set
@@ -1132,16 +1131,8 @@ tc_hs_type mode rn_ty@(HsTupleTy _ HsBoxedOrConstraintTuple hs_tys) exp_kind
        ; finish_tuple rn_ty tup_sort tys' (map (const arg_kind) tys') exp_kind }
 
 
-tc_hs_type mode rn_ty@(HsTupleTy _ hs_tup_sort tys) exp_kind
-  = tc_tuple rn_ty mode tup_sort tys exp_kind
-  where
-    tup_sort = case hs_tup_sort of  -- Fourth case dealt with above
-                  HsUnboxedTuple    -> UnboxedTuple
-                  HsBoxedTuple      -> BoxedTuple
-                  HsConstraintTuple -> ConstraintTuple
-#if __GLASGOW_HASKELL__ <= 810
-                  _                 -> panic "tc_hs_type HsTupleTy"
-#endif
+tc_hs_type mode rn_ty@(HsTupleTy _ HsUnboxedTuple tys) exp_kind
+  = tc_tuple rn_ty mode UnboxedTuple tys exp_kind
 
 tc_hs_type mode rn_ty@(HsSumTy _ hs_tys) exp_kind
   = do { let arity = length hs_tys
@@ -1172,6 +1163,7 @@ tc_hs_type mode rn_ty@(HsExplicitTupleTy _ tys) exp_kind
        ; let kind_con   = tupleTyCon           Boxed arity
              ty_con     = promotedTupleDataCon Boxed arity
              tup_k      = mkTyConApp kind_con ks
+       ; checkTupSize arity
        ; checkExpectedKind rn_ty (mkTyConApp ty_con (ks ++ taus)) tup_k exp_kind }
   where
     arity = length tys
@@ -1326,33 +1318,28 @@ finish_tuple rn_ty tup_sort tau_tys tau_kinds exp_kind = do
          -- Drop any uses of 1-tuple constraints here.
          -- See Note [Ignore unary constraint tuples]
       -> check_expected_kind tau_ty constraintKind
-      |  arity > mAX_CTUPLE_SIZE
-      -> failWith (bigConstraintTuple arity)
       |  otherwise
-      -> let tycon = cTupleTyCon arity in
-         check_expected_kind (mkTyConApp tycon tau_tys) constraintKind
+      -> do let tycon = cTupleTyCon arity
+            checkCTupSize arity
+            check_expected_kind (mkTyConApp tycon tau_tys) constraintKind
     BoxedTuple -> do
       let tycon = tupleTyCon Boxed arity
+      checkTupSize arity
       checkWiredInTyCon tycon
       check_expected_kind (mkTyConApp tycon tau_tys) liftedTypeKind
-    UnboxedTuple ->
+    UnboxedTuple -> do
       let tycon    = tupleTyCon Unboxed arity
           tau_reps = map kindRep tau_kinds
           -- See also Note [Unboxed tuple RuntimeRep vars] in GHC.Core.TyCon
           arg_tys  = tau_reps ++ tau_tys
-          res_kind = unboxedTupleKind tau_reps in
+          res_kind = unboxedTupleKind tau_reps
+      checkTupSize arity
       check_expected_kind (mkTyConApp tycon arg_tys) res_kind
   where
     arity = length tau_tys
     check_expected_kind ty act_kind =
       checkExpectedKind rn_ty ty act_kind exp_kind
 
-bigConstraintTuple :: Arity -> MsgDoc
-bigConstraintTuple arity
-  = hang (text "Constraint tuple arity too large:" <+> int arity
-          <+> parens (text "max arity =" <+> int mAX_CTUPLE_SIZE))
-       2 (text "Instead, use a nested tuple")
-
 {-
 Note [Ignore unary constraint tuples]
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


=====================================
compiler/GHC/Tc/Gen/Pat.hs
=====================================
@@ -32,6 +32,7 @@ import GHC.Prelude
 import {-# SOURCE #-}   GHC.Tc.Gen.Expr( tcSyntaxOp, tcSyntaxOpGen, tcInferRho )
 
 import GHC.Hs
+import GHC.Iface.Load
 import GHC.Tc.Utils.Zonk
 import GHC.Tc.Gen.Sig( TcPragEnv, lookupPragEnv, addInlinePrags )
 import GHC.Tc.Utils.Monad
@@ -509,6 +510,7 @@ Fortunately that's what matchExpectedFunTySigma returns anyway.
               tc = tupleTyCon boxity arity
               -- NB: tupleTyCon does not flatten 1-tuples
               -- See Note [Don't flatten tuples from HsSyn] in GHC.Core.Make
+        ; checkTupSize arity
         ; (coi, arg_tys) <- matchExpectedPatTy (matchExpectedTyConApp tc)
                                                penv (scaledThing pat_ty)
                      -- Unboxed tuples have RuntimeRep vars, which we discard:


=====================================
testsuite/tests/polykinds/T10451.stderr
=====================================
@@ -10,3 +10,15 @@ T10451.hs:22:12: error:
                     Eq a, Eq a, Eq a, Eq a, Eq a, Eq a, Eq a, Eq a, Eq a, Eq a, Eq a,
                     Eq a, Eq a, Eq a)’
       In the type declaration for ‘T’
+
+T10451.hs:22:12: error:
+    • Constraint tuple arity too large: 66 (max arity = 64)
+        Instead, use a nested tuple
+    • In the type ‘(Eq a, Eq a, Eq a, Eq a, Eq a, Eq a, Eq a, Eq a,
+                    Eq a, Eq a, Eq a, Eq a, Eq a, Eq a, Eq a, Eq a, Eq a, Eq a, Eq a,
+                    Eq a, Eq a, Eq a, Eq a, Eq a, Eq a, Eq a, Eq a, Eq a, Eq a, Eq a,
+                    Eq a, Eq a, Eq a, Eq a, Eq a, Eq a, Eq a, Eq a, Eq a, Eq a, Eq a,
+                    Eq a, Eq a, Eq a, Eq a, Eq a, Eq a, Eq a, Eq a, Eq a, Eq a, Eq a,
+                    Eq a, Eq a, Eq a, Eq a, Eq a, Eq a, Eq a, Eq a, Eq a, Eq a, Eq a,
+                    Eq a, Eq a, Eq a)’
+      In the type declaration for ‘T’


=====================================
testsuite/tests/rename/should_fail/T6148.stderr deleted
=====================================
@@ -1,15 +0,0 @@
-
-T6148.hs:3:5:
-    A 65-tuple is too large for GHC
-      (max size is 64)
-      Workaround: use nested tuples or define a data type
-
-T6148.hs:7:5:
-    A 65-tuple is too large for GHC
-      (max size is 64)
-      Workaround: use nested tuples or define a data type
-
-T6148.hs:11:6:
-    A 65-tuple is too large for GHC
-      (max size is 64)
-      Workaround: use nested tuples or define a data type


=====================================
testsuite/tests/rename/should_fail/T6148a.hs
=====================================
@@ -0,0 +1,4 @@
+module T6148a where
+
+a = (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+         0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)


=====================================
testsuite/tests/rename/should_fail/T6148a.stderr
=====================================
@@ -0,0 +1,14 @@
+
+T6148a.hs:3:5: error:
+    • A 65-tuple is too large for GHC
+        (max size is 64)
+        Workaround: use nested tuples or define a data type
+    • In the expression:
+        (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
+      In an equation for ‘a’:
+          a = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+               0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+               0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+               0)


=====================================
testsuite/tests/rename/should_fail/T6148b.hs
=====================================
@@ -0,0 +1,3 @@
+module T6148b where
+
+b = (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)


=====================================
testsuite/tests/rename/should_fail/T6148b.stderr
=====================================
@@ -0,0 +1,9 @@
+
+T6148b.hs:3:5: error:
+    • A 65-tuple is too large for GHC
+        (max size is 64)
+        Workaround: use nested tuples or define a data type
+    • In the expression:
+        (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)
+      In an equation for ‘b’:
+          b = (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)


=====================================
testsuite/tests/rename/should_fail/T6148.hs → testsuite/tests/rename/should_fail/T6148c.hs
=====================================
@@ -1,10 +1,4 @@
-module T6148 where
-
-a = (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-         0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
-
-
-b = (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)
+module T6148c where
 
 data T = T
 


=====================================
testsuite/tests/rename/should_fail/T6148c.stderr
=====================================
@@ -0,0 +1,7 @@
+
+T6148c.hs:5:6: error:
+    • A 65-tuple is too large for GHC
+        (max size is 64)
+        Workaround: use nested tuples or define a data type
+    • In the type signature:
+        c :: (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T


=====================================
testsuite/tests/rename/should_fail/all.T
=====================================
@@ -87,7 +87,9 @@ test('T5892b', normal, compile_fail, ['-package containers'])
 test('T5951', normal, compile_fail, [''])
 test('T6018rnfail', normal, compile_fail, [''])
 test('T6060', normal, compile_fail, [''])
-test('T6148', normal, compile_fail, [''])
+test('T6148a', normal, compile_fail, [''])
+test('T6148b', normal, compile_fail, [''])
+test('T6148c', normal, compile_fail, [''])
 test('T7164', normal, compile_fail, [''])
 test('T7338', normal, compile_fail, [''])
 test('T7338a', normal, compile_fail, [''])


=====================================
testsuite/tests/typecheck/should_fail/T18723a.hs
=====================================
@@ -0,0 +1,11 @@
+module T18723a where
+
+data T1 = MkT1
+  ( Int, Int, Int, Int, Int, Int, Int, Int, Int, Int
+  , Int, Int, Int, Int, Int, Int, Int, Int, Int, Int
+  , Int, Int, Int, Int, Int, Int, Int, Int, Int, Int
+  , Int, Int, Int, Int, Int, Int, Int, Int, Int, Int
+  , Int, Int, Int, Int, Int, Int, Int, Int, Int, Int
+  , Int, Int, Int, Int, Int, Int, Int, Int, Int, Int
+  , Int, Int, Int, Int, Int
+  )


=====================================
testsuite/tests/typecheck/should_fail/T18723a.stderr
=====================================
@@ -0,0 +1,26 @@
+
+T18723a.hs:4:3: error:
+    • A 65-tuple is too large for GHC
+        (max size is 64)
+        Workaround: use nested tuples or define a data type
+    • In the type ‘(Int, Int, Int, Int, Int, Int, Int, Int, Int, Int,
+                    Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int,
+                    Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int,
+                    Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int,
+                    Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int,
+                    Int, Int, Int)’
+      In the definition of data constructor ‘MkT1’
+      In the data declaration for ‘T1’
+
+T18723a.hs:4:3: error:
+    • A 65-tuple is too large for GHC
+        (max size is 64)
+        Workaround: use nested tuples or define a data type
+    • In the type ‘(Int, Int, Int, Int, Int, Int, Int, Int, Int, Int,
+                    Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int,
+                    Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int,
+                    Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int,
+                    Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int,
+                    Int, Int, Int)’
+      In the definition of data constructor ‘MkT1’
+      In the data declaration for ‘T1’


=====================================
testsuite/tests/typecheck/should_fail/T18723b.hs
=====================================
@@ -0,0 +1,14 @@
+{-# LANGUAGE DataKinds #-}
+module T18723b where
+
+import Data.Proxy
+
+data T2 = MkT2 (Proxy
+ '( Int, Int, Int, Int, Int, Int, Int, Int, Int, Int
+  , Int, Int, Int, Int, Int, Int, Int, Int, Int, Int
+  , Int, Int, Int, Int, Int, Int, Int, Int, Int, Int
+  , Int, Int, Int, Int, Int, Int, Int, Int, Int, Int
+  , Int, Int, Int, Int, Int, Int, Int, Int, Int, Int
+  , Int, Int, Int, Int, Int, Int, Int, Int, Int, Int
+  , Int, Int, Int, Int, Int
+  ))


=====================================
testsuite/tests/typecheck/should_fail/T18723b.stderr
=====================================
@@ -0,0 +1,274 @@
+
+T18723b.hs:7:2: error:
+    • A 65-tuple is too large for GHC
+        (max size is 64)
+        Workaround: use nested tuples or define a data type
+    • In the first argument of ‘Proxy’, namely
+        ‘'(Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int)’
+      In the type ‘(Proxy '(Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int))’
+      In the definition of data constructor ‘MkT2’
+
+T18723b.hs:7:2: error:
+    • A 65-tuple is too large for GHC
+        (max size is 64)
+        Workaround: use nested tuples or define a data type
+    • In the first argument of ‘Proxy’, namely
+        ‘'(Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int,
+           Int)’
+      In the type ‘(Proxy '(Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int,
+                            Int))’
+      In the definition of data constructor ‘MkT2’


=====================================
testsuite/tests/typecheck/should_fail/T18723c.hs
=====================================
@@ -0,0 +1,12 @@
+{-# LANGUAGE UnboxedTuples #-}
+module T18723c where
+
+data T3 = MkT3
+ (# Int, Int, Int, Int, Int, Int, Int, Int, Int, Int
+  , Int, Int, Int, Int, Int, Int, Int, Int, Int, Int
+  , Int, Int, Int, Int, Int, Int, Int, Int, Int, Int
+  , Int, Int, Int, Int, Int, Int, Int, Int, Int, Int
+  , Int, Int, Int, Int, Int, Int, Int, Int, Int, Int
+  , Int, Int, Int, Int, Int, Int, Int, Int, Int, Int
+  , Int, Int, Int, Int, Int
+  #)


=====================================
testsuite/tests/typecheck/should_fail/T18723c.stderr
=====================================
@@ -0,0 +1,26 @@
+
+T18723c.hs:5:2: error:
+    • A 65-tuple is too large for GHC
+        (max size is 64)
+        Workaround: use nested tuples or define a data type
+    • In the type ‘(# Int, Int, Int, Int, Int, Int, Int, Int, Int, Int,
+                      Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int,
+                      Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int,
+                      Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int,
+                      Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int,
+                      Int, Int, Int #)’
+      In the definition of data constructor ‘MkT3’
+      In the data declaration for ‘T3’
+
+T18723c.hs:5:2: error:
+    • A 65-tuple is too large for GHC
+        (max size is 64)
+        Workaround: use nested tuples or define a data type
+    • In the type ‘(# Int, Int, Int, Int, Int, Int, Int, Int, Int, Int,
+                      Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int,
+                      Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int,
+                      Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int,
+                      Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int,
+                      Int, Int, Int #)’
+      In the definition of data constructor ‘MkT3’
+      In the data declaration for ‘T3’


=====================================
testsuite/tests/typecheck/should_fail/all.T
=====================================
@@ -580,6 +580,9 @@ test('T18357b', normal, compile_fail, [''])
 test('T18455', normal, compile_fail, [''])
 test('T18534', normal, compile_fail, [''])
 test('T18714', normal, compile_fail, [''])
+test('T18723a', normal, compile_fail, [''])
+test('T18723b', normal, compile_fail, [''])
+test('T18723c', normal, compile_fail, [''])
 test('too-many', normal, compile_fail, [''])
 test('T18640a', normal, compile_fail, [''])
 test('T18640b', normal, compile_fail, [''])


=====================================
utils/haddock
=====================================
@@ -1 +1 @@
-Subproject commit f7d9e0bb987ca31c3b15cbe63198dafbeee3a395
+Subproject commit ff3145a5612f9cb8363aca79cb279a6080dc406b



View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/36b1df64308f7c2f2dce45ce1fbbfad813459b7f

-- 
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/36b1df64308f7c2f2dce45ce1fbbfad813459b7f
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/20201016/d4b19ca4/attachment-0001.html>


More information about the ghc-commits mailing list