mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-17 03:36:37 +00:00

…d type When the same name is used for a derived type and generic interface in a module, and no explicit PUBLIC or PRIVATE statement appears for the name but the derived type definition does have an explicit accessibility, that accessibility must also apply to the generic interface.
89 lines
1.8 KiB
Fortran
89 lines
1.8 KiB
Fortran
! RUN: %python %S/test_errors.py %s %flang_fc1
|
|
module m
|
|
public i
|
|
integer, private :: j
|
|
!ERROR: The accessibility of 'i' has already been specified as PUBLIC
|
|
private i
|
|
!WARNING: The accessibility of 'j' has already been specified as PRIVATE
|
|
private j
|
|
end
|
|
|
|
module m2
|
|
interface operator(.foo.)
|
|
module procedure ifoo
|
|
end interface
|
|
public :: operator(.foo.)
|
|
!ERROR: The accessibility of 'OPERATOR(.foo.)' has already been specified as PUBLIC
|
|
private :: operator(.foo.)
|
|
interface operator(+)
|
|
module procedure ifoo
|
|
end interface
|
|
public :: operator(+)
|
|
!ERROR: The accessibility of 'OPERATOR(+)' has already been specified as PUBLIC
|
|
private :: operator(+) , ifoo
|
|
contains
|
|
integer function ifoo(x, y)
|
|
logical, intent(in) :: x, y
|
|
end
|
|
end module
|
|
|
|
module m3
|
|
type t
|
|
end type
|
|
private :: operator(.lt.)
|
|
interface operator(<)
|
|
logical function lt(x, y)
|
|
import t
|
|
type(t), intent(in) :: x, y
|
|
end function
|
|
end interface
|
|
!ERROR: The accessibility of 'OPERATOR(<)' has already been specified as PRIVATE
|
|
public :: operator(<)
|
|
interface operator(.gt.)
|
|
logical function gt(x, y)
|
|
import t
|
|
type(t), intent(in) :: x, y
|
|
end function
|
|
end interface
|
|
public :: operator(>)
|
|
!ERROR: The accessibility of 'OPERATOR(.GT.)' has already been specified as PUBLIC
|
|
private :: operator(.gt.)
|
|
end
|
|
|
|
module m4
|
|
private
|
|
type, public :: foo
|
|
end type
|
|
interface foo
|
|
procedure fun
|
|
end interface
|
|
contains
|
|
function fun
|
|
end
|
|
end
|
|
|
|
subroutine s4
|
|
!ERROR: 'fun' is PRIVATE in 'm4'
|
|
use m4, only: foo, fun
|
|
type(foo) x ! ok
|
|
print *, foo() ! ok
|
|
end
|
|
|
|
module m5
|
|
public
|
|
type, private :: foo
|
|
end type
|
|
interface foo
|
|
procedure fun
|
|
end interface
|
|
contains
|
|
function fun
|
|
end
|
|
end
|
|
|
|
subroutine s5
|
|
!ERROR: 'foo' is PRIVATE in 'm5'
|
|
use m5, only: foo, fun
|
|
print *, fun() ! ok
|
|
end
|