diff options
author | Matthew Pickering <matthewtpickering@gmail.com> | 2023-04-13 15:48:22 +0100 |
---|---|---|
committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2023-04-17 08:08:48 -0400 |
commit | 51479ceb31b8bfef15b966de7cfd64d1fdb22257 (patch) | |
tree | ed538e6d5b02cf67b678c5f39c518bfa3f4e41c7 | |
parent | a1371ebb53a8206d6d99ac0d9bff4ed8a3043498 (diff) | |
download | haskell-51479ceb31b8bfef15b966de7cfd64d1fdb22257.tar.gz |
Account for special GHC.Prim import in warnUnusedPackages
The GHC.Prim import is treated quite specially primarily because there
isn't an interface file for GHC.Prim. Therefore we record separately in
the ModSummary if it's imported or not so we don't go looking for it.
This logic hasn't made it's way to `-Wunused-packages` so if you
imported GHC.Prim then the warning would complain you didn't use
`-package ghc-prim`.
Fixes #23212
-rw-r--r-- | compiler/GHC/Driver/Make.hs | 10 | ||||
-rw-r--r-- | testsuite/tests/warnings/should_compile/T23212.hs | 3 | ||||
-rw-r--r-- | testsuite/tests/warnings/should_compile/all.T | 4 |
3 files changed, 14 insertions, 3 deletions
diff --git a/compiler/GHC/Driver/Make.hs b/compiler/GHC/Driver/Make.hs index 0d0df0dd1b..7f60d5a8a0 100644 --- a/compiler/GHC/Driver/Make.hs +++ b/compiler/GHC/Driver/Make.hs @@ -514,13 +514,17 @@ warnUnusedPackages :: UnitState -> DynFlags -> ModuleGraph -> DriverMessages warnUnusedPackages us dflags mod_graph = let diag_opts = initDiagOpts dflags + home_mod_sum = filter (\ms -> homeUnitId_ dflags == ms_unitid ms) (mgModSummaries mod_graph) + -- Only need non-source imports here because SOURCE imports are always HPT loadedPackages = concat $ mapMaybe (\(fs, mn) -> lookupModulePackage us (unLoc mn) fs) - $ concatMap ms_imps ( - filter (\ms -> homeUnitId_ dflags == ms_unitid ms) (mgModSummaries mod_graph)) + $ concatMap ms_imps home_mod_sum + + any_import_ghc_prim = any ms_ghc_prim_import home_mod_sum - used_args = Set.fromList $ map unitId loadedPackages + used_args = Set.fromList (map unitId loadedPackages) + `Set.union` Set.fromList [ primUnitId | any_import_ghc_prim ] resolve (u,mflag) = do -- The units which we depend on via the command line explicitly diff --git a/testsuite/tests/warnings/should_compile/T23212.hs b/testsuite/tests/warnings/should_compile/T23212.hs new file mode 100644 index 0000000000..892a28d4a4 --- /dev/null +++ b/testsuite/tests/warnings/should_compile/T23212.hs @@ -0,0 +1,3 @@ +module T23212 where + +import GHC.Prim diff --git a/testsuite/tests/warnings/should_compile/all.T b/testsuite/tests/warnings/should_compile/all.T index 9fe8b99787..0c8c2f6a5d 100644 --- a/testsuite/tests/warnings/should_compile/all.T +++ b/testsuite/tests/warnings/should_compile/all.T @@ -39,6 +39,10 @@ test('UnusedPackages', [normalise_version('bytestring') ], multimod_compile, ['UnusedPackages.hs', '-package=bytestring -package=base -package=process -package=ghc -Wunused-packages']) +test('T23212', [normalise_version('ghc-prim') + ], multimod_compile, + ['T23212', '-v0 -package=ghc-prim -Werror -Wunused-packages']) + test('T18402', normal, compile, ['']) test('T19564a', normal, compile, ['']) |