GFortran duplicate use of submodule / module
Gfortran 9.3.0 is sensitive to overlapping / duplicated use elements in a module - submodule hierarchy.
That is, if a procedure is used in multiple places in the module - submodule hierarchy, only use the procedure once at the highest necessary level of the hierarchy.
This is perhaps best shown by example:
module foo
implicit none (type, external)
contains
subroutine bar()
end subroutine bar
end module foo
module parent
use foo, only : bar
implicit none (type, external)
interface
module subroutine baz
end subroutine baz
end interface
end module parent
submodule (parent) child
use foo, only : bar !< this is unnecessary and triggers the Gfortran 9.3.0 error
implicit none (type, external)
contains
module procedure baz
end procedure baz
end submodule childThe error message from Gfortran 9.3.0 is like:
$ gfortran -c .\dupe.f90
dupe.f90:17:17:
17 | submodule (parent) child
| 1
18 | use foo, only : bar
| 2