diff --git a/Cabal/Cabal.cabal b/Cabal/Cabal.cabal
index 54d5d874f763d88a8b68cf6cc889835e0da516f2..548017796f0afe8b7d8cee6003f6605d061241ad 100644
--- a/Cabal/Cabal.cabal
+++ b/Cabal/Cabal.cabal
@@ -84,6 +84,8 @@ extra-source-files:
   tests/ParserTests/regressions/encoding-0.8.cabal
   tests/ParserTests/regressions/encoding-0.8.expr
   tests/ParserTests/regressions/encoding-0.8.format
+  tests/ParserTests/regressions/extensions-paths-5054.cabal
+  tests/ParserTests/regressions/extensions-paths-5054.check
   tests/ParserTests/regressions/generics-sop.cabal
   tests/ParserTests/regressions/generics-sop.expr
   tests/ParserTests/regressions/generics-sop.format
diff --git a/Cabal/Distribution/PackageDescription/Check.hs b/Cabal/Distribution/PackageDescription/Check.hs
index ee9fd817ca76bb044e00579d4bff9dcdeb91567b..1a5964d50e9ba29b8dbb823addfc3ab191c681ef 100644
--- a/Cabal/Distribution/PackageDescription/Check.hs
+++ b/Cabal/Distribution/PackageDescription/Check.hs
@@ -150,6 +150,7 @@ checkPackage gpkg mpkg =
   ++ checkFlagNames gpkg
   ++ checkUnusedFlags gpkg
   ++ checkUnicodeXFields gpkg
+  ++ checkPathsModuleExtensions pkg
   where
     pkg = fromMaybe (flattenPackageDescription gpkg) mpkg
 
@@ -1657,6 +1658,36 @@ checkUnicodeXFields gpd
         , toDListOf (L.buildInfos         . L.customFieldsBI . traverse) gpd
         ]
 
+-- | cabal-version <2.2 + Paths_module + default-extensions: doesn't build.
+checkPathsModuleExtensions :: PackageDescription -> [PackageCheck]
+checkPathsModuleExtensions pd
+    | specVersion pd >= mkVersion [2,1] = []
+    | any checkBI (allBuildInfo pd) || any checkLib (allLibraries pd)
+        = return $ PackageBuildImpossible $ unwords
+            [ "The package uses RebindableSyntax with OverloadedStrings or OverloadedLists"
+            , "in default-extensions, and also Paths_ autogen module."
+            , "That configuration is known to cause compile failures with Cabal < 2.2."
+            , "To use these default-extensions with Paths_ autogen module"
+            , "specify at least 'cabal-version: 2.2'."
+            ]
+    | otherwise = []
+  where
+    mn = autogenPathsModuleName pd
+
+    checkLib :: Library -> Bool
+    checkLib l = mn `elem` exposedModules l && checkExts (l ^. L.defaultExtensions)
+
+    checkBI :: BuildInfo -> Bool
+    checkBI bi =
+        (mn `elem` otherModules bi || mn `elem` autogenModules bi) &&
+        checkExts (bi ^. L.defaultExtensions)
+
+    checkExts exts = rebind `elem` exts && (strings `elem` exts || lists `elem` exts)
+      where
+        rebind  = EnableExtension RebindableSyntax
+        strings = EnableExtension OverloadedStrings
+        lists   = EnableExtension OverloadedLists
+
 checkDevelopmentOnlyFlagsBuildInfo :: BuildInfo -> [PackageCheck]
 checkDevelopmentOnlyFlagsBuildInfo bi =
   catMaybes [
diff --git a/Cabal/Distribution/Types/PackageDescription.hs b/Cabal/Distribution/Types/PackageDescription.hs
index 5550c090cf0d74e5ba4d825f9ce2bd4b2a806fb1..b9dd51735c6f54a23e0c7bdbdae3ca42d46e5dcd 100644
--- a/Cabal/Distribution/Types/PackageDescription.hs
+++ b/Cabal/Distribution/Types/PackageDescription.hs
@@ -364,27 +364,21 @@ withForeignLib pkg_descr f =
 -- ---------------------------------------------------------------------------
 -- The BuildInfo type
 
--- | The 'BuildInfo' for the library (if there is one and it's buildable), and
--- all buildable executables, test suites and benchmarks.  Useful for gathering
--- dependencies.
+-- | All 'BuildInfo' in the 'PackageDescription':
+-- libraries, executables, test-suites and benchmarks.
+--
+-- Useful for implementing package checks.
 allBuildInfo :: PackageDescription -> [BuildInfo]
 allBuildInfo pkg_descr = [ bi | lib <- allLibraries pkg_descr
-                              , let bi = libBuildInfo lib
-                              , buildable bi ]
-                      ++ [ bi | flib <- foreignLibs pkg_descr
-                              , let bi = foreignLibBuildInfo flib
-                              , buildable bi ]
-                      ++ [ bi | exe <- executables pkg_descr
-                              , let bi = buildInfo exe
-                              , buildable bi ]
-                      ++ [ bi | tst <- testSuites pkg_descr
-                              , let bi = testBuildInfo tst
-                              , buildable bi ]
-                      ++ [ bi | tst <- benchmarks pkg_descr
-                              , let bi = benchmarkBuildInfo tst
-                              , buildable bi ]
-  --FIXME: many of the places where this is used, we actually want to look at
-  --       unbuildable bits too, probably need separate functions
+                               , let bi = libBuildInfo lib ]
+                       ++ [ bi | flib <- foreignLibs pkg_descr
+                               , let bi = foreignLibBuildInfo flib ]
+                       ++ [ bi | exe <- executables pkg_descr
+                               , let bi = buildInfo exe ]
+                       ++ [ bi | tst <- testSuites pkg_descr
+                               , let bi = testBuildInfo tst ]
+                       ++ [ bi | tst <- benchmarks pkg_descr
+                               , let bi = benchmarkBuildInfo tst ]
 
 -- | Return all of the 'BuildInfo's of enabled components, i.e., all of
 -- the ones that would be built if you run @./Setup build@.
diff --git a/Cabal/changelog b/Cabal/changelog
index ec477ea51ee1487b6aa69965b95c73994753be81..7dcd28fd6665fe136587de8f16ece6ada439e78f 100644
--- a/Cabal/changelog
+++ b/Cabal/changelog
@@ -16,6 +16,8 @@
 	* Use better defaulting for `build-type`; rename `PackageDescription`'s
 	  `buildType` field to `buildTypeRaw` and introduce new `buildType`
 	  function (#4958)
+	* `D.T.PackageDescription.allBuildInfo` returns all build infos, not
+	  only for buildable components (#5087)
 	* Removed `UnknownBuildType` constructor from `BuildType` (#5003).
 	* Added `HexFloatLiterals` to `KnownExtension`.
 	* Cabal will no longer try to build an empty set of `inputModules`
diff --git a/Cabal/tests/CheckTests.hs b/Cabal/tests/CheckTests.hs
index dcdd67710c8f1119b1f786b2d2a6c02ba0fab64c..12105a679124a0ca9e969ecd70198258cfb3fee9 100644
--- a/Cabal/tests/CheckTests.hs
+++ b/Cabal/tests/CheckTests.hs
@@ -29,6 +29,7 @@ checkTests = testGroup "regressions"
     , checkTest "haddock-api-2.18.1-check.cabal"
     , checkTest "issue-774.cabal"
     , checkTest "MiniAgda.cabal"
+    , checkTest "extensions-paths-5054.cabal"
     ]
 
 checkTest :: FilePath -> TestTree
diff --git a/Cabal/tests/ParserTests/regressions/extensions-paths-5054.cabal b/Cabal/tests/ParserTests/regressions/extensions-paths-5054.cabal
new file mode 100644
index 0000000000000000000000000000000000000000..d6cc4fea72b88fe6a2655f1d3752bf4d259af5c4
--- /dev/null
+++ b/Cabal/tests/ParserTests/regressions/extensions-paths-5054.cabal
@@ -0,0 +1,39 @@
+name:         extensions-paths
+version:      5054
+category:     Test
+maintainer:   Oleg Grenrus
+license:      BSD3
+license-file: LICENSe
+synopsis:     Paths_pkg module + "bad" extensions + old cabal
+description:
+  Only cabal-version: 2.2 or later will build Paths_pkg ok with
+
+  * RebindableSyntax and
+
+  * OverloadedLists or OverloadedStrings
+
+  `fromList` or `fromString` will be out-of-scope when compiling Paths_ module.
+
+  Other extensions (like NoImplicitPrelude) were handled before
+build-type:    Simple
+cabal-version: 1.12
+
+library
+  default-language: Haskell2010
+  exposed-modules:  Issue Paths_extensions_paths
+  default-extensions:
+    RebindableSyntax
+    OverloadedStrings
+
+test-suite tests
+  default-language: Haskell2010
+  main-is: Test.hs
+  type: exitcode-stdio-1.0
+  if os(linux)
+    other-modules: Paths_extensions_paths
+  else
+    buildable: False
+
+  default-extensions:
+    OverloadedLists
+    RebindableSyntax
diff --git a/Cabal/tests/ParserTests/regressions/extensions-paths-5054.check b/Cabal/tests/ParserTests/regressions/extensions-paths-5054.check
new file mode 100644
index 0000000000000000000000000000000000000000..6268308c77df8ece6f6f1e54ee3e19fd72ca5639
--- /dev/null
+++ b/Cabal/tests/ParserTests/regressions/extensions-paths-5054.check
@@ -0,0 +1 @@
+The package uses RebindableSyntax with OverloadedStrings or OverloadedLists in default-extensions, and also Paths_ autogen module. That configuration is known to cause compile failures with Cabal < 2.2. To use these default-extensions with Paths_ autogen module specify at least 'cabal-version: 2.2'.
diff --git a/Makefile b/Makefile
index 4c338c935dfe490d58cc7d20b4c6da71f0380277..4fd5f8ba83054fc25701aaff4452ed2df5bdf2c1 100644
--- a/Makefile
+++ b/Makefile
@@ -35,5 +35,6 @@ gen-extra-source-files:
 	cabal new-run --builddir=dist-newstyle-meta --project-file=cabal.project.meta gen-extra-source-files -- cabal-install/cabal-install.cabal
 
 cabal-install-test:
-	cabal new-build cabal cabal-tests
-	cd cabal-testsuite && `cabal-plan list-bin cabal-tests` --with-cabal=`cabal-plan list-bin cabal` --hide-successes -j3
+	cabal new-build -j3 all --disable-tests --disable-benchmarks
+	rm -rf .ghc.environment.*
+	cd cabal-testsuite && `cabal-plan list-bin cabal-tests` --with-cabal=`cabal-plan list-bin cabal` --hide-successes -j3 ${TEST}
diff --git a/cabal-testsuite/PackageTests/PathsModule/Library/my.cabal b/cabal-testsuite/PackageTests/PathsModule/Library/my.cabal
index 44205af3f5933aad5caa2ff0be50f729281b0b19..4eb489be6d085a009b5e38268d532c823ec6a354 100644
--- a/cabal-testsuite/PackageTests/PathsModule/Library/my.cabal
+++ b/cabal-testsuite/PackageTests/PathsModule/Library/my.cabal
@@ -1,11 +1,11 @@
+Cabal-version: 2.1
 name: PathsModule
 version: 0.1
-license: BSD3
+license: BSD-3-Clause
 author: Johan Tibell
 stability: stable
 category: PackageTests
 build-type: Simple
-Cabal-version: >= 1.10
 
 description:
     Check that the generated paths module compiles.