Peter Klausler dc0d56febb [flang] Warn about local names that are the same as their enclosing program unit
Modules, submodules, main programs, and BLOCK DATA subprograms have names
that cannot be used within their scope, so we allow those names to be
used for other entities in the scope.  This might not be entirely
conformant with the language standard, so warn about it.

Differential Revision: https://reviews.llvm.org/D139146
2022-12-03 17:47:35 -08:00

40 lines
1.0 KiB
Fortran

! RUN: %python %S/test_errors.py %s %flang_fc1
program p
!PORTABILITY: Name 'p' declared in a main program should not have the same name as the main program
integer :: p
end
module m
!PORTABILITY: Name 'm' declared in a module should not have the same name as the module
integer :: m
end
submodule(m) sm
!PORTABILITY: Name 'sm' declared in a submodule should not have the same name as the submodule
integer :: sm
end
block data bd
!PORTABILITY: Name 'bd' declared in a BLOCK DATA subprogram should not have the same name as the BLOCK DATA subprogram
type bd
end type
end
module m2
type :: t
end type
interface
subroutine s
!ERROR: Module 'm2' cannot USE itself
use m2, only: t
end subroutine
end interface
end module
subroutine s
!ERROR: 's' is already declared in this scoping unit
integer :: s
end
function f() result(res)
integer :: res
!ERROR: 'f' is already declared in this scoping unit
!ERROR: The type of 'f' has already been declared
real :: f
res = 1
end