Skip to content
Snippets Groups Projects
Forked from Glasgow Haskell Compiler / GHC
186 commits behind the upstream repository.
Vladislav Zavialov's avatar
Vladislav Zavialov authored
This patch fixes multiple bugs (#22581, #25983, #25984, #25991)
in name resolution of subordinate import lists.

Bug #22581
----------
In subordinate import lists, the use of the `type` namespace specifier
used to be ignored. For example, this import statement was incorrectly
accepted:

  import Prelude (Bool(type True))

Now it results in an error message:

  <interactive>:2:17: error: [GHC-51433]
    In the import of ‘Prelude’:
      a data type called ‘Bool’ is exported,
      but its subordinate item ‘True’ is not in the type namespace.

Bug #25983
----------
In subordinate import lists within a `hiding` clause, non-existent
items led to a poor warning message with -Wdodgy-imports. Consider:

  import Prelude hiding (Bool(X))

The warning message for this import statement used to misreport the
cause of the problem:

  <interactive>:3:24: warning: [GHC-56449] [-Wdodgy-imports]
    In the import of ‘Prelude’:
      an item called ‘Bool’ is exported, but it is a type.

Now the warning message is correct:

  <interactive>:2:24: warning: [GHC-10237] [-Wdodgy-imports]
    In the import of ‘Prelude’:
      a data type called ‘Bool’ is exported, but it does not export
      any constructors or record fields called ‘X’.

Bug #25984
----------
In subordinate import lists within a `hiding` clause, non-existent
items resulted in the entire import declaration being discarded.
For example, this program was incorrectly accepted:

  import Prelude hiding (Bool(True,X))
  t = True

Now it results in an error message:

  <interactive>:2:5: error: [GHC-88464]
    Data constructor not in scope: True

Bug #25991
----------
In subordinate import lists, it was not possible to refer to a class
method if there was an associated type of the same name:

  module M_helper where
    class C a b where
      type a # b
      (#) :: a -> b -> ()

  module M where
    import M_helper (C((#)))

This import declaration failed with:

  M.hs:2:28: error: [GHC-10237]
    In the import of ‘M_helper’:
      an item called ‘C’ is exported, but it does not export any children
      (constructors, class methods or field names) called ‘#’.

Now it is accepted.

Summary
-------
The changes required to fix these bugs are almost entirely confined to
GHC.Rename.Names. Other than that, there is a new error constructor
BadImportNonTypeSubordinates with error code [GHC-51433].

Test cases:
  T22581a T22581b T22581c T22581d
  T25983a T25983b T25983c T25983d T25983e T25983f T25983g
  T25984a T25984b
  T25991a T25991b1 T25991b2
282df905
History