forked from OSchip/llvm-project
46 lines
1.3 KiB
Fortran
46 lines
1.3 KiB
Fortran
|
! Error tests for structure constructors.
|
||
|
! Errors caught by expression resolution are tested elsewhere; these are the
|
||
|
! errors meant to be caught by name resolution, as well as acceptable use
|
||
|
! cases.
|
||
|
! Type parameters are used to make the parses unambiguous.
|
||
|
|
||
|
module module1
|
||
|
type :: type1(j)
|
||
|
integer, kind :: j
|
||
|
integer :: n = 1
|
||
|
end type type1
|
||
|
type, extends(type1) :: type2(k)
|
||
|
integer, kind :: k
|
||
|
integer :: m
|
||
|
end type type2
|
||
|
type :: privaten(j)
|
||
|
integer, kind :: j
|
||
|
integer, private :: n
|
||
|
end type privaten
|
||
|
contains
|
||
|
subroutine type1arg(x)
|
||
|
type(type1(0)), intent(in) :: x
|
||
|
end subroutine type1arg
|
||
|
subroutine type2arg(x)
|
||
|
type(type2(0,0)), intent(in) :: x
|
||
|
end subroutine type2arg
|
||
|
subroutine errors
|
||
|
call type1arg(type1(0)())
|
||
|
call type1arg(type1(0)(1))
|
||
|
call type1arg(type1(0)(n=1))
|
||
|
!ERROR: Keyword 'bad=' does not name a component of derived type 'type1'
|
||
|
call type1arg(type1(0)(bad=1))
|
||
|
call type2arg(type2(0,0)(n=1,m=2))
|
||
|
call type2arg(type2(0,0)(m=2))
|
||
|
call type2arg(type2(0,0)(type1=type1(0)(n=1),m=2))
|
||
|
call type2arg(type2(0,0)(type1=type1(0)(),m=2))
|
||
|
end subroutine errors
|
||
|
end module module1
|
||
|
|
||
|
module module2
|
||
|
!ERROR: No definition found for type parameter 'k'
|
||
|
type :: type1(k)
|
||
|
end type
|
||
|
type(type1):: x
|
||
|
end module
|