151 lines
9 KiB
Fortran
151 lines
9 KiB
Fortran
!RUN: %flang_fc1 -fdebug-dump-symbols %s | FileCheck %s
|
|
module m
|
|
type pdt1(k1,l1)
|
|
integer, kind :: k1
|
|
integer, len :: l1
|
|
type(pdt2(k1,l1)), allocatable :: a1
|
|
end type pdt1
|
|
type pdt2(k2,l2)
|
|
integer, kind :: k2
|
|
integer, len :: l2
|
|
integer(k2) :: j2
|
|
type(pdt1(k2,l2)) :: a2(k2)
|
|
end type pdt2
|
|
interface
|
|
module function mf(n,str,x1) result(res)
|
|
integer, intent(in) :: n
|
|
character(n), intent(in) :: str
|
|
type(pdt1(1,n)), intent(in) :: x1
|
|
type(pdt2(2,n)) :: res
|
|
end function
|
|
module subroutine ms(f)
|
|
procedure(mf) :: f
|
|
end subroutine
|
|
end interface
|
|
integer sm
|
|
end module
|
|
!CHECK: mf, MODULE, PUBLIC (Function): Subprogram isInterface result:TYPE(pdt2(k2=2_4,l2=n)) res (INTEGER(4) n,CHARACTER(n,1) str,TYPE(pdt1(k1=1_4,l1=n)) x1)
|
|
!CHECK: pdt1, PUBLIC: DerivedType components: a1
|
|
!CHECK: pdt2, PUBLIC: DerivedType components: j2,a2
|
|
!CHECK: sm, PUBLIC size=4 offset=0: ObjectEntity type: INTEGER(4)
|
|
!CHECK: DerivedType scope: pdt1
|
|
!CHECK: a1, ALLOCATABLE: ObjectEntity type: TYPE(pdt2(int(k1,kind=4),int(l1,kind=4)))
|
|
!CHECK: k1: TypeParam type:INTEGER(4) Kind
|
|
!CHECK: l1: TypeParam type:INTEGER(4) Len
|
|
!CHECK: DerivedType scope: pdt2
|
|
!CHECK: a2: ObjectEntity type: TYPE(pdt1(k1=int(k2,kind=4),l1=int(l2,kind=4))) shape: 1_8:k2
|
|
!CHECK: j2: ObjectEntity type: INTEGER(int(int(k2,kind=4),kind=8))
|
|
!CHECK: k2: TypeParam type:INTEGER(4) Kind
|
|
!CHECK: l2: TypeParam type:INTEGER(4) Len
|
|
!CHECK: Subprogram scope: mf size=112 alignment=8
|
|
!CHECK: mf (Function): HostAssoc
|
|
!CHECK: n, INTENT(IN) size=4 offset=0: ObjectEntity dummy type: INTEGER(4)
|
|
!CHECK: res size=40 offset=72: ObjectEntity funcResult type: TYPE(pdt2(k2=2_4,l2=n))
|
|
!CHECK: str, INTENT(IN) size=24 offset=8: ObjectEntity dummy type: CHARACTER(n,1)
|
|
!CHECK: x1, INTENT(IN) size=40 offset=32: ObjectEntity dummy type: TYPE(pdt1(k1=1_4,l1=n))
|
|
!CHECK: DerivedType scope: size=40 alignment=8 instantiation of pdt1(k1=1_4,l1=n)
|
|
!CHECK: a1, ALLOCATABLE size=40 offset=0: ObjectEntity type: TYPE(pdt2(k2=1_4,l2=int(l1,kind=4)))
|
|
!CHECK: k1: TypeParam type:INTEGER(4) Kind init:1_4
|
|
!CHECK: l1: TypeParam type:INTEGER(4) Len init:n
|
|
!CHECK: DerivedType scope: size=72 alignment=8 instantiation of pdt2(k2=1_4,l2=int(l1,kind=4))
|
|
!CHECK: a2 size=64 offset=8: ObjectEntity type: TYPE(pdt1(k1=1_4,l1=int(l2,kind=4))) shape: 1_8:1_8
|
|
!CHECK: j2 size=1 offset=0: ObjectEntity type: INTEGER(1)
|
|
!CHECK: k2: TypeParam type:INTEGER(4) Kind init:1_4
|
|
!CHECK: l2: TypeParam type:INTEGER(4) Len init:int(l1,kind=4)
|
|
!CHECK: DerivedType scope: size=40 alignment=8 instantiation of pdt1(k1=1_4,l1=int(l2,kind=4))
|
|
!CHECK: a1, ALLOCATABLE size=40 offset=0: ObjectEntity type: TYPE(pdt2(k2=1_4,l2=int(l1,kind=4)))
|
|
!CHECK: k1: TypeParam type:INTEGER(4) Kind init:1_4
|
|
!CHECK: l1: TypeParam type:INTEGER(4) Len init:int(l2,kind=4)
|
|
!CHECK: DerivedType scope: size=72 alignment=8 instantiation of pdt2(k2=2_4,l2=n)
|
|
!CHECK: a2 size=64 offset=8: ObjectEntity type: TYPE(pdt1(k1=2_4,l1=int(l2,kind=4))) shape: 1_8:2_8
|
|
!CHECK: j2 size=2 offset=0: ObjectEntity type: INTEGER(2)
|
|
!CHECK: k2: TypeParam type:INTEGER(4) Kind init:2_4
|
|
!CHECK: l2: TypeParam type:INTEGER(4) Len init:n
|
|
!CHECK: DerivedType scope: size=40 alignment=8 instantiation of pdt1(k1=2_4,l1=int(l2,kind=4))
|
|
!CHECK: a1, ALLOCATABLE size=40 offset=0: ObjectEntity type: TYPE(pdt2(k2=2_4,l2=int(l1,kind=4)))
|
|
!CHECK: k1: TypeParam type:INTEGER(4) Kind init:2_4
|
|
!CHECK: l1: TypeParam type:INTEGER(4) Len init:int(l2,kind=4)
|
|
!CHECK: DerivedType scope: size=72 alignment=8 instantiation of pdt2(k2=2_4,l2=int(l1,kind=4))
|
|
!CHECK: a2 size=64 offset=8: ObjectEntity type: TYPE(pdt1(k1=2_4,l1=int(l2,kind=4))) shape: 1_8:2_8
|
|
!CHECK: j2 size=2 offset=0: ObjectEntity type: INTEGER(2)
|
|
!CHECK: k2: TypeParam type:INTEGER(4) Kind init:2_4
|
|
!CHECK: l2: TypeParam type:INTEGER(4) Len init:int(l1,kind=4)
|
|
|
|
submodule(m) sm
|
|
contains
|
|
module procedure mf
|
|
print *, len(str), x1%k1, x1%l1, res%k2, res%l2
|
|
allocate(res%a2(1)%a1)
|
|
res%a2(1)%a1%j2 = 2
|
|
end procedure
|
|
module procedure ms
|
|
! type(pdt2(2.3)) x
|
|
! x = f(3, "abc", pdt1(1,3)())
|
|
end procedure
|
|
end submodule
|
|
!CHECK: Module scope: sm size=0 alignment=1
|
|
!CHECK: mf, MODULE, PUBLIC (Function): Subprogram result:TYPE(pdt2(k2=2_4,l2=n)) res (INTEGER(4) n,CHARACTER(n,1) str,TYPE(pdt1(k1=1_4,l1=n)) x1) moduleInterface: mf, MODULE, PUBLIC (Function): Subprogram isInterface result:TYPE(pdt2(k2=2_4,l2=n)) res (INTEGER(4) n,CHARACTER(n,1) str,TYPE(pdt1(k1=1_4,l1=n)) x1)
|
|
!CHECK: Subprogram scope: mf size=112 alignment=8
|
|
!CHECK: len, INTRINSIC, PURE (Function): ProcEntity
|
|
!CHECK: n, INTENT(IN) size=4 offset=0: ObjectEntity dummy type: INTEGER(4)
|
|
!CHECK: res size=40 offset=72: ObjectEntity funcResult type: TYPE(pdt2(k2=2_4,l2=n))
|
|
!CHECK: str, INTENT(IN) size=24 offset=8: ObjectEntity dummy type: CHARACTER(n,1)
|
|
!CHECK: x1, INTENT(IN) size=40 offset=32: ObjectEntity dummy type: TYPE(pdt1(k1=1_4,l1=n))
|
|
!CHECK: DerivedType scope: size=72 alignment=8 instantiation of pdt2(k2=2_4,l2=n)
|
|
!CHECK: a2 size=64 offset=8: ObjectEntity type: TYPE(pdt1(k1=2_4,l1=int(l2,kind=4))) shape: 1_8:2_8
|
|
!CHECK: j2 size=2 offset=0: ObjectEntity type: INTEGER(2)
|
|
!CHECK: k2: TypeParam type:INTEGER(4) Kind init:2_4
|
|
!CHECK: l2: TypeParam type:INTEGER(4) Len init:n
|
|
!CHECK: DerivedType scope: size=40 alignment=8 instantiation of pdt1(k1=2_4,l1=int(l2,kind=4))
|
|
!CHECK: a1, ALLOCATABLE size=40 offset=0: ObjectEntity type: TYPE(pdt2(k2=2_4,l2=int(l1,kind=4)))
|
|
!CHECK: k1: TypeParam type:INTEGER(4) Kind init:2_4
|
|
!CHECK: l1: TypeParam type:INTEGER(4) Len init:int(l2,kind=4)
|
|
!CHECK: DerivedType scope: size=72 alignment=8 instantiation of pdt2(k2=2_4,l2=int(l1,kind=4))
|
|
!CHECK: a2 size=64 offset=8: ObjectEntity type: TYPE(pdt1(k1=2_4,l1=int(l2,kind=4))) shape: 1_8:2_8
|
|
!CHECK: j2 size=2 offset=0: ObjectEntity type: INTEGER(2)
|
|
!CHECK: k2: TypeParam type:INTEGER(4) Kind init:2_4
|
|
!CHECK: l2: TypeParam type:INTEGER(4) Len init:int(l1,kind=4)
|
|
!CHECK: DerivedType scope: size=40 alignment=8 instantiation of pdt1(k1=1_4,l1=n)
|
|
!CHECK: a1, ALLOCATABLE size=40 offset=0: ObjectEntity type: TYPE(pdt2(k2=1_4,l2=int(l1,kind=4)))
|
|
!CHECK: k1: TypeParam type:INTEGER(4) Kind init:1_4
|
|
!CHECK: l1: TypeParam type:INTEGER(4) Len init:n
|
|
!CHECK: DerivedType scope: size=72 alignment=8 instantiation of pdt2(k2=1_4,l2=int(l1,kind=4))
|
|
!CHECK: a2 size=64 offset=8: ObjectEntity type: TYPE(pdt1(k1=1_4,l1=int(l2,kind=4))) shape: 1_8:1_8
|
|
!CHECK: j2 size=1 offset=0: ObjectEntity type: INTEGER(1)
|
|
!CHECK: k2: TypeParam type:INTEGER(4) Kind init:1_4
|
|
!CHECK: l2: TypeParam type:INTEGER(4) Len init:int(l1,kind=4)
|
|
!CHECK: DerivedType scope: size=40 alignment=8 instantiation of pdt1(k1=1_4,l1=int(l2,kind=4))
|
|
!CHECK: a1, ALLOCATABLE size=40 offset=0: ObjectEntity type: TYPE(pdt2(k2=1_4,l2=int(l1,kind=4)))
|
|
!CHECK: k1: TypeParam type:INTEGER(4) Kind init:1_4
|
|
!CHECK: l1: TypeParam type:INTEGER(4) Len init:int(l2,kind=4)
|
|
|
|
program test
|
|
use m
|
|
type(pdt2(2,3)) x
|
|
x = mf(3, "abc", pdt1(1,3)())
|
|
! call ms(mf)
|
|
end program
|
|
!CHECK: MainProgram scope: test size=88 alignment=8
|
|
!CHECK: mf, MODULE (Function): Use from mf in m
|
|
!CHECK: pdt1: Use from pdt1 in m
|
|
!CHECK: pdt2: Use from pdt2 in m
|
|
!CHECK: sm: Use from sm in m
|
|
!CHECK: x size=88 offset=0: ObjectEntity type: TYPE(pdt2(k2=2_4,l2=3_4))
|
|
!CHECK: DerivedType scope: size=88 alignment=8 instantiation of pdt2(k2=2_4,l2=3_4)
|
|
!CHECK: a2 size=80 offset=8: ObjectEntity type: TYPE(pdt1(k1=2_4,l1=3_4)) shape: 1_8:2_8
|
|
!CHECK: j2 size=2 offset=0: ObjectEntity type: INTEGER(2)
|
|
!CHECK: k2: TypeParam type:INTEGER(4) Kind init:2_4
|
|
!CHECK: l2: TypeParam type:INTEGER(4) Len init:3_4
|
|
!CHECK: DerivedType scope: size=40 alignment=8 instantiation of pdt1(k1=2_4,l1=3_4)
|
|
!CHECK: a1, ALLOCATABLE size=40 offset=0: ObjectEntity type: TYPE(pdt2(k2=2_4,l2=3_4))
|
|
!CHECK: k1: TypeParam type:INTEGER(4) Kind init:2_4
|
|
!CHECK: l1: TypeParam type:INTEGER(4) Len init:3_4
|
|
!CHECK: DerivedType scope: size=40 alignment=8 instantiation of pdt1(k1=1_4,l1=3_4)
|
|
!CHECK: a1, ALLOCATABLE size=40 offset=0: ObjectEntity type: TYPE(pdt2(k2=1_4,l2=3_4))
|
|
!CHECK: k1: TypeParam type:INTEGER(4) Kind init:1_4
|
|
!CHECK: l1: TypeParam type:INTEGER(4) Len init:3_4
|
|
!CHECK: DerivedType scope: size=1 alignment=1 instantiation of pdt2(k2=1_4,l2=3_4)
|
|
!CHECK: a2: ObjectEntity type: TYPE(pdt1(k1=1_4,l1=3_4)) shape: 1_8:1_8
|
|
!CHECK: j2 size=1 offset=0: ObjectEntity type: INTEGER(1)
|
|
!CHECK: k2: TypeParam type:INTEGER(4) Kind init:1_4
|
|
!CHECK: l2: TypeParam type:INTEGER(4) Len init:3_4
|