Gfortran 9.3 duplicated use error fix

Gfortran 9.3.0 has a new bug (or feature perhaps) of being 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)
subroutine bar()
end subroutine bar
end module foo

module parent
use foo, only : bar
implicit none (type, external)
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)
module procedure baz
end procedure baz
end submodule child

The error message from Gfortran 9.3.0 is like:

$ gfortran -c .\dupe.f90


   17 | submodule (parent) child
      |                 1
   18 | use foo, only : bar
      |                   2