[m-rev.] for review: make --warn-unused-imports more effective

Julien Fischer jfischer at opturion.com
Fri Nov 28 14:18:44 AEDT 2025


On Thu, 27 Nov 2025 at 16:59, Julien Fischer <jfischer at opturion.com> wrote:

>
> On Thu, 27 Nov 2025 at 00:13, Zoltan Somogyi <zoltan.somogyi at runbox.com>
> wrote:
>
>  > Make --warn-unused-imports more effective.
> >
> > Specifically, make it warn about interface imports that are not used
> > in the initial HLDS, even if they *are* used after the expansion of
> > type-, inst- and mode-equivalences.
> >
> > compiler/hlds_module.m:
> >     Add a slot to the HLDS to store the set of modules that are
> >     imported in the interface but are unused there when the HLDS
> >     is first constructed.
> >
> > compiler/module_qual.qualify_items.m:
> >     Compute this set, and return it to mercury_compile_make_hlds.m.
> >
> >     Make the code module qualifying aug_compilation_units warn about
> >     unused interface imports only if unused_imports.m won't do the same
> later.
> >
> > compiler/mercury_compile_make_hlds.m:
> >     Pass the set to make_hlds_passes.m.
> >
> > compiler/make_hlds_passes.m:
> >     Store the set in the initial HLDS.
> >
> > compiler/prog_data_used_modules.m:
> >     Replace set_ordlists with set_tree234s.
> >
> > compiler/unused_imports.m:
> >     Consider an interface-imported module unused in the interface
> >     if module_qual.qualify_items.m considered it unused, even if
> >     changes made by equiv_type.m has added uses of it later.
> >
> > compiler/handle_options.m:
> >     Stop making --warn-unused-imports imply
> --no-warn-unused-interface-imports,
> >     since new logic in module_qual.qualify_items.m makes this
> unnecessary.
> >
> > compiler/make_module_file_names.m:
> > compiler/type_inst_mode_map.m:
> > compiler/write_deps_file.m:
> >     Move imports from the interface section to the implementation
> section,
> >     in response to the new, more thorough warnings.
>
> That's fine.
>

Actually, there is one problem here.  The compiler is now ignoring the
--no-warn-interface-imports
option and always printing a warning.  Consider:

   :- module a.
   :- interface.
   :-  import_module b.

   :- module b.
   :- interface.
   :- type foo ---> foo.

   $ mmc --no-warn-interface-imports --make liba

should not produce a warning, but now does.

Julien.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mercurylang.org/archives/reviews/attachments/20251128/6c99c5af/attachment.html>


More information about the reviews mailing list