156 lines · plain
1!RUN: %flang_fc1 -fdebug-dump-symbols %s | FileCheck %s2module m3 type pdt1(k1,l1)4 integer, kind :: k15 integer, len :: l16 type(pdt2(k1,l1)), allocatable :: a17 end type pdt18 type pdt2(k2,l2)9 integer, kind :: k210 integer, len :: l211 integer(k2) :: j212 type(pdt1(k2,l2)) :: a2(k2)13 end type pdt214 interface15 module function mf(n,str,x1) result(res)16 integer, intent(in) :: n17 character(n), intent(in) :: str18 type(pdt1(1,n)), intent(in) :: x119 type(pdt2(2,n)) :: res20 end function21 module subroutine ms(f)22 procedure(mf) :: f23 end subroutine24 end interface25 integer sm26end module27!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)28!CHECK: pdt1, PUBLIC: DerivedType components: a129!CHECK: pdt2, PUBLIC: DerivedType components: j2,a230!CHECK: sm, PUBLIC size=4 offset=0: ObjectEntity type: INTEGER(4)31!CHECK: DerivedType scope: pdt132!CHECK: a1, ALLOCATABLE: ObjectEntity type: TYPE(pdt2(int(k1,kind=4),int(l1,kind=4)))33!CHECK: k1: TypeParam type:INTEGER(4) Kind34!CHECK: l1: TypeParam type:INTEGER(4) Len35!CHECK: DerivedType scope: pdt236!CHECK: a2: ObjectEntity type: TYPE(pdt1(k1=int(k2,kind=4),l1=int(l2,kind=4))) shape: 1_8:k237!CHECK: j2: ObjectEntity type: INTEGER(int(int(k2,kind=4),kind=8))38!CHECK: k2: TypeParam type:INTEGER(4) Kind39!CHECK: l2: TypeParam type:INTEGER(4) Len40!CHECK: Subprogram scope: mf size=112 alignment=841!CHECK: mf (Function): HostAssoc42!CHECK: n, INTENT(IN) size=4 offset=0: ObjectEntity dummy type: INTEGER(4)43!CHECK: res size=40 offset=72: ObjectEntity funcResult type: TYPE(pdt2(k2=2_4,l2=n))44!CHECK: str, INTENT(IN) size=24 offset=8: ObjectEntity dummy type: CHARACTER(n,1)45!CHECK: x1, INTENT(IN) size=40 offset=32: ObjectEntity dummy type: TYPE(pdt1(k1=1_4,l1=n))46!CHECK: DerivedType scope: size=40 alignment=8 instantiation of pdt1(k1=1_4,l1=n)47!CHECK: a1, ALLOCATABLE size=40 offset=0: ObjectEntity type: TYPE(pdt2(k2=1_4,l2=int(l1,kind=4)))48!CHECK: k1: TypeParam type:INTEGER(4) Kind init:1_449!CHECK: l1: TypeParam type:INTEGER(4) Len init:n50!CHECK: DerivedType scope: size=72 alignment=8 instantiation of pdt2(k2=1_4,l2=int(l1,kind=4))51!CHECK: a2 size=64 offset=8: ObjectEntity type: TYPE(pdt1(k1=1_4,l1=int(l2,kind=4))) shape: 1_8:1_852!CHECK: j2 size=1 offset=0: ObjectEntity type: INTEGER(1)53!CHECK: k2: TypeParam type:INTEGER(4) Kind init:1_454!CHECK: l2: TypeParam type:INTEGER(4) Len init:int(l1,kind=4)55!CHECK: DerivedType scope: size=40 alignment=8 instantiation of pdt1(k1=1_4,l1=int(l2,kind=4))56!CHECK: a1, ALLOCATABLE size=40 offset=0: ObjectEntity type: TYPE(pdt2(k2=1_4,l2=int(l1,kind=4)))57!CHECK: k1: TypeParam type:INTEGER(4) Kind init:1_458!CHECK: l1: TypeParam type:INTEGER(4) Len init:int(l2,kind=4)59!CHECK: DerivedType scope: size=72 alignment=8 instantiation of pdt2(k2=2_4,l2=n)60!CHECK: a2 size=64 offset=8: ObjectEntity type: TYPE(pdt1(k1=2_4,l1=int(l2,kind=4))) shape: 1_8:2_861!CHECK: j2 size=2 offset=0: ObjectEntity type: INTEGER(2)62!CHECK: k2: TypeParam type:INTEGER(4) Kind init:2_463!CHECK: l2: TypeParam type:INTEGER(4) Len init:n64!CHECK: DerivedType scope: size=40 alignment=8 instantiation of pdt1(k1=2_4,l1=int(l2,kind=4))65!CHECK: a1, ALLOCATABLE size=40 offset=0: ObjectEntity type: TYPE(pdt2(k2=2_4,l2=int(l1,kind=4)))66!CHECK: k1: TypeParam type:INTEGER(4) Kind init:2_467!CHECK: l1: TypeParam type:INTEGER(4) Len init:int(l2,kind=4)68!CHECK: DerivedType scope: size=72 alignment=8 instantiation of pdt2(k2=2_4,l2=int(l1,kind=4))69!CHECK: a2 size=64 offset=8: ObjectEntity type: TYPE(pdt1(k1=2_4,l1=int(l2,kind=4))) shape: 1_8:2_870!CHECK: j2 size=2 offset=0: ObjectEntity type: INTEGER(2)71!CHECK: k2: TypeParam type:INTEGER(4) Kind init:2_472!CHECK: l2: TypeParam type:INTEGER(4) Len init:int(l1,kind=4)73 74submodule(m) sm75 contains76 module procedure mf77 print *, len(str), x1%k1, x1%l1, res%k2, res%l278 allocate(res%a2(1)%a1)79 res%a2(1)%a1%j2 = 280 end procedure81 module procedure ms82! type(pdt2(2.3)) x83! x = f(3, "abc", pdt1(1,3)())84 end procedure85end submodule86!CHECK: Module scope: sm size=0 alignment=187!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)88!CHECK: Subprogram scope: mf size=112 alignment=889!CHECK: len, INTRINSIC, PURE (Function): ProcEntity90!CHECK: n, INTENT(IN) size=4 offset=0: ObjectEntity dummy type: INTEGER(4)91!CHECK: res size=40 offset=72: ObjectEntity funcResult type: TYPE(pdt2(k2=2_4,l2=n))92!CHECK: str, INTENT(IN) size=24 offset=8: ObjectEntity dummy type: CHARACTER(n,1)93!CHECK: x1, INTENT(IN) size=40 offset=32: ObjectEntity dummy type: TYPE(pdt1(k1=1_4,l1=n))94!CHECK: DerivedType scope: size=72 alignment=8 instantiation of pdt2(k2=2_4,l2=n)95!CHECK: a2 size=64 offset=8: ObjectEntity type: TYPE(pdt1(k1=2_4,l1=int(l2,kind=4))) shape: 1_8:2_896!CHECK: j2 size=2 offset=0: ObjectEntity type: INTEGER(2)97!CHECK: k2: TypeParam type:INTEGER(4) Kind init:2_498!CHECK: l2: TypeParam type:INTEGER(4) Len init:n99!CHECK: DerivedType scope: size=40 alignment=8 instantiation of pdt1(k1=2_4,l1=int(l2,kind=4))100!CHECK: a1, ALLOCATABLE size=40 offset=0: ObjectEntity type: TYPE(pdt2(k2=2_4,l2=int(l1,kind=4)))101!CHECK: k1: TypeParam type:INTEGER(4) Kind init:2_4102!CHECK: l1: TypeParam type:INTEGER(4) Len init:int(l2,kind=4)103!CHECK: DerivedType scope: size=72 alignment=8 instantiation of pdt2(k2=2_4,l2=int(l1,kind=4))104!CHECK: a2 size=64 offset=8: ObjectEntity type: TYPE(pdt1(k1=2_4,l1=int(l2,kind=4))) shape: 1_8:2_8105!CHECK: j2 size=2 offset=0: ObjectEntity type: INTEGER(2)106!CHECK: k2: TypeParam type:INTEGER(4) Kind init:2_4107!CHECK: l2: TypeParam type:INTEGER(4) Len init:int(l1,kind=4)108!CHECK: DerivedType scope: size=40 alignment=8 instantiation of pdt1(k1=1_4,l1=n)109!CHECK: a1, ALLOCATABLE size=40 offset=0: ObjectEntity type: TYPE(pdt2(k2=1_4,l2=int(l1,kind=4)))110!CHECK: k1: TypeParam type:INTEGER(4) Kind init:1_4111!CHECK: l1: TypeParam type:INTEGER(4) Len init:n112!CHECK: DerivedType scope: size=72 alignment=8 instantiation of pdt2(k2=1_4,l2=int(l1,kind=4))113!CHECK: a2 size=64 offset=8: ObjectEntity type: TYPE(pdt1(k1=1_4,l1=int(l2,kind=4))) shape: 1_8:1_8114!CHECK: j2 size=1 offset=0: ObjectEntity type: INTEGER(1)115!CHECK: k2: TypeParam type:INTEGER(4) Kind init:1_4116!CHECK: l2: TypeParam type:INTEGER(4) Len init:int(l1,kind=4)117!CHECK: DerivedType scope: size=40 alignment=8 instantiation of pdt1(k1=1_4,l1=int(l2,kind=4))118!CHECK: a1, ALLOCATABLE size=40 offset=0: ObjectEntity type: TYPE(pdt2(k2=1_4,l2=int(l1,kind=4)))119!CHECK: k1: TypeParam type:INTEGER(4) Kind init:1_4120!CHECK: l1: TypeParam type:INTEGER(4) Len init:int(l2,kind=4)121 122program test123 use m124 type(pdt2(2,3)) x125 x = mf(3, "abc", pdt1(1,3)())126! call ms(mf)127end program128!CHECK: MainProgram scope: TEST size=88 alignment=8129!CHECK: mf, MODULE (Function): Use from mf in m130!CHECK: pdt1: Use from pdt1 in m131!CHECK: pdt2: Use from pdt2 in m132!CHECK: sm: Use from sm in m133!CHECK: x size=88 offset=0: ObjectEntity type: TYPE(pdt2(k2=2_4,l2=3_4))134!CHECK: DerivedType scope: size=88 alignment=8 instantiation of pdt2(k2=2_4,l2=3_4)135!CHECK: a2 size=80 offset=8: ObjectEntity type: TYPE(pdt1(k1=2_4,l1=3_4)) shape: 1_8:2_8136!CHECK: j2 size=2 offset=0: ObjectEntity type: INTEGER(2)137!CHECK: k2: TypeParam type:INTEGER(4) Kind init:2_4138!CHECK: l2: TypeParam type:INTEGER(4) Len init:3_4139!CHECK: DerivedType scope: size=40 alignment=8 instantiation of pdt1(k1=2_4,l1=3_4)140!CHECK: a1, ALLOCATABLE size=40 offset=0: ObjectEntity type: TYPE(pdt2(k2=2_4,l2=3_4))141!CHECK: k1: TypeParam type:INTEGER(4) Kind init:2_4142!CHECK: l1: TypeParam type:INTEGER(4) Len init:3_4143!CHECK: DerivedType scope: size=40 alignment=8 instantiation of pdt1(k1=1_4,l1=3_4)144!CHECK: a1, ALLOCATABLE size=40 offset=0: ObjectEntity type: TYPE(pdt2(k2=1_4,l2=3_4))145!CHECK: k1: TypeParam type:INTEGER(4) Kind init:1_4146!CHECK: l1: TypeParam type:INTEGER(4) Len init:3_4147!CHECK: DerivedType scope: size=48 alignment=8 instantiation of pdt2(k2=1_4,l2=3_4) sourceRange=0 bytes148!CHECK: a2 size=40 offset=8: ObjectEntity type: TYPE(pdt1(k1=1_4,l1=3_4)) shape: 1_8:1_8149!CHECK: j2 size=1 offset=0: ObjectEntity type: INTEGER(1)150!CHECK: k2: TypeParam type:INTEGER(4) Kind init:1_4151!CHECK: l2: TypeParam type:INTEGER(4) Len init:3_4152!CHECK: DerivedType scope: size=40 alignment=8 instantiation of pdt1(k1=1_4,l1=3_4) sourceRange=0 bytes153!CHECK: a1, ALLOCATABLE size=40 offset=0: ObjectEntity type: TYPE(pdt2(k2=1_4,l2=3_4))154!CHECK: k1: TypeParam type:INTEGER(4) Kind init:1_4155!CHECK: l1: TypeParam type:INTEGER(4) Len init:3_4156