1*eabae4cfSIvan Zhechev! RUN: %python %S/test_symbols.py %s %flang_fc1 264ab3302SCarolineConcatto! Forward references to derived types (non-error cases) 364ab3302SCarolineConcatto 464ab3302SCarolineConcatto!DEF: /main MainProgram 564ab3302SCarolineConcattoprogram main 664ab3302SCarolineConcatto !DEF: /main/t1 DerivedType 764ab3302SCarolineConcatto type :: t1 864ab3302SCarolineConcatto !DEF: /main/t2 DerivedType 964ab3302SCarolineConcatto !DEF: /main/t1/t1a ALLOCATABLE ObjectEntity TYPE(t2) 1064ab3302SCarolineConcatto type(t2), allocatable :: t1a 1164ab3302SCarolineConcatto !REF: /main/t2 1264ab3302SCarolineConcatto !DEF: /main/t1/t1p POINTER ObjectEntity TYPE(t2) 1364ab3302SCarolineConcatto type(t2), pointer :: t1p 1464ab3302SCarolineConcatto end type 1564ab3302SCarolineConcatto !REF: /main/t2 1664ab3302SCarolineConcatto type :: t2 1764ab3302SCarolineConcatto !REF: /main/t2 1864ab3302SCarolineConcatto !DEF: /main/t2/t2a ALLOCATABLE ObjectEntity TYPE(t2) 1964ab3302SCarolineConcatto type(t2), allocatable :: t2a 2064ab3302SCarolineConcatto !REF: /main/t2 2164ab3302SCarolineConcatto !DEF: /main/t2/t2p POINTER ObjectEntity TYPE(t2) 2264ab3302SCarolineConcatto type(t2), pointer :: t2p 2364ab3302SCarolineConcatto end type 2464ab3302SCarolineConcatto !REF: /main/t1 2564ab3302SCarolineConcatto !DEF: /main/t1x TARGET ObjectEntity TYPE(t1) 2664ab3302SCarolineConcatto type(t1), target :: t1x 2764ab3302SCarolineConcatto !REF: /main/t1x 2864ab3302SCarolineConcatto !REF: /main/t1/t1a 2964ab3302SCarolineConcatto allocate(t1x%t1a) 3064ab3302SCarolineConcatto !REF: /main/t1x 3164ab3302SCarolineConcatto !REF: /main/t1/t1p 3264ab3302SCarolineConcatto !REF: /main/t1/t1a 3364ab3302SCarolineConcatto t1x%t1p => t1x%t1a 3464ab3302SCarolineConcatto !REF: /main/t1x 3564ab3302SCarolineConcatto !REF: /main/t1/t1a 3664ab3302SCarolineConcatto !REF: /main/t2/t2a 3764ab3302SCarolineConcatto allocate(t1x%t1a%t2a) 3864ab3302SCarolineConcatto !REF: /main/t1x 3964ab3302SCarolineConcatto !REF: /main/t1/t1a 4064ab3302SCarolineConcatto !REF: /main/t2/t2p 4164ab3302SCarolineConcatto !REF: /main/t2/t2a 4264ab3302SCarolineConcatto t1x%t1a%t2p => t1x%t1a%t2a 4364ab3302SCarolineConcattoend program 4464ab3302SCarolineConcatto!DEF: /f1/fwd DerivedType 4564ab3302SCarolineConcatto!DEF: /f1 (Function) Subprogram TYPE(fwd) 4664ab3302SCarolineConcatto!DEF: /f1/n (Implicit) ObjectEntity INTEGER(4) 4764ab3302SCarolineConcattotype(fwd) function f1(n) 4864ab3302SCarolineConcatto !REF: /f1/fwd 4964ab3302SCarolineConcatto type :: fwd 5064ab3302SCarolineConcatto !DEF: /f1/fwd/n ObjectEntity INTEGER(4) 5164ab3302SCarolineConcatto integer :: n 5264ab3302SCarolineConcatto end type 5364ab3302SCarolineConcatto !DEF: /f1/f1 ObjectEntity TYPE(fwd) 5464ab3302SCarolineConcatto !REF: /f1/fwd/n 5564ab3302SCarolineConcatto !REF: /f1/n 5664ab3302SCarolineConcatto f1%n = n 5764ab3302SCarolineConcattoend function 5864ab3302SCarolineConcatto!DEF: /s1 (Subroutine) Subprogram 5964ab3302SCarolineConcatto!DEF: /s1/q1 (Implicit) ObjectEntity TYPE(fwd) 6064ab3302SCarolineConcattosubroutine s1 (q1) 6164ab3302SCarolineConcatto !DEF: /s1/fwd DerivedType 6264ab3302SCarolineConcatto implicit type(fwd)(q) 6364ab3302SCarolineConcatto !REF: /s1/fwd 6464ab3302SCarolineConcatto type :: fwd 6564ab3302SCarolineConcatto !DEF: /s1/fwd/n ObjectEntity INTEGER(4) 6664ab3302SCarolineConcatto integer :: n 6764ab3302SCarolineConcatto end type 6864ab3302SCarolineConcatto !REF: /s1/q1 6964ab3302SCarolineConcatto !REF: /s1/fwd/n 7064ab3302SCarolineConcatto q1%n = 1 7164ab3302SCarolineConcattoend subroutine 7264ab3302SCarolineConcatto!DEF: /f2/fwdpdt DerivedType 73452d7ebcSpeter klausler!DEF: /f2/kind INTRINSIC, PURE (Function) ProcEntity 7464ab3302SCarolineConcatto!DEF: /f2 (Function) Subprogram TYPE(fwdpdt(k=4_4)) 7564ab3302SCarolineConcatto!DEF: /f2/n (Implicit) ObjectEntity INTEGER(4) 7664ab3302SCarolineConcattotype(fwdpdt(kind(0))) function f2(n) 7764ab3302SCarolineConcatto !REF: /f2/fwdpdt 7864ab3302SCarolineConcatto !DEF: /f2/fwdpdt/k TypeParam INTEGER(4) 7964ab3302SCarolineConcatto type :: fwdpdt(k) 8064ab3302SCarolineConcatto !REF: /f2/fwdpdt/k 8164ab3302SCarolineConcatto integer, kind :: k 8264ab3302SCarolineConcatto !REF: /f2/fwdpdt/k 834cbfd93aSpeter klausler !DEF: /f2/fwdpdt/n ObjectEntity INTEGER(int(int(k,kind=4),kind=8)) 8464ab3302SCarolineConcatto integer(kind=k) :: n 8564ab3302SCarolineConcatto end type 8664ab3302SCarolineConcatto !DEF: /f2/f2 ObjectEntity TYPE(fwdpdt(k=4_4)) 8764ab3302SCarolineConcatto !DEF: /f2/DerivedType2/n ObjectEntity INTEGER(4) 8864ab3302SCarolineConcatto !REF: /f2/n 8964ab3302SCarolineConcatto f2%n = n 9064ab3302SCarolineConcattoend function 9164ab3302SCarolineConcatto!DEF: /s2 (Subroutine) Subprogram 9264ab3302SCarolineConcatto!DEF: /s2/q1 (Implicit) ObjectEntity TYPE(fwdpdt(k=4_4)) 9364ab3302SCarolineConcattosubroutine s2 (q1) 9464ab3302SCarolineConcatto !DEF: /s2/fwdpdt DerivedType 95452d7ebcSpeter klausler !DEF: /s2/kind INTRINSIC, PURE (Function) ProcEntity 9664ab3302SCarolineConcatto implicit type(fwdpdt(kind(0)))(q) 9764ab3302SCarolineConcatto !REF: /s2/fwdpdt 9864ab3302SCarolineConcatto !DEF: /s2/fwdpdt/k TypeParam INTEGER(4) 9964ab3302SCarolineConcatto type :: fwdpdt(k) 10064ab3302SCarolineConcatto !REF: /s2/fwdpdt/k 10164ab3302SCarolineConcatto integer, kind :: k 10264ab3302SCarolineConcatto !REF: /s2/fwdpdt/k 1034cbfd93aSpeter klausler !DEF: /s2/fwdpdt/n ObjectEntity INTEGER(int(int(k,kind=4),kind=8)) 10464ab3302SCarolineConcatto integer(kind=k) :: n 10564ab3302SCarolineConcatto end type 10664ab3302SCarolineConcatto !REF: /s2/q1 10764ab3302SCarolineConcatto !DEF: /s2/DerivedType2/n ObjectEntity INTEGER(4) 10864ab3302SCarolineConcatto q1%n = 1 10964ab3302SCarolineConcattoend subroutine 11064ab3302SCarolineConcatto!DEF: /m1 Module 11164ab3302SCarolineConcattomodule m1 11264ab3302SCarolineConcatto !DEF: /m1/forward PRIVATE DerivedType 11364ab3302SCarolineConcatto private :: forward 11464ab3302SCarolineConcatto !DEF: /m1/base PUBLIC DerivedType 11564ab3302SCarolineConcatto type :: base 11664ab3302SCarolineConcatto !REF: /m1/forward 11764ab3302SCarolineConcatto !DEF: /m1/base/p POINTER ObjectEntity CLASS(forward) 11864ab3302SCarolineConcatto class(forward), pointer :: p 11964ab3302SCarolineConcatto end type 12064ab3302SCarolineConcatto !REF: /m1/base 12164ab3302SCarolineConcatto !REF: /m1/forward 12264ab3302SCarolineConcatto type, extends(base) :: forward 12364ab3302SCarolineConcatto !DEF: /m1/forward/n ObjectEntity INTEGER(4) 12464ab3302SCarolineConcatto integer :: n 12564ab3302SCarolineConcatto end type 12664ab3302SCarolineConcatto contains 12764ab3302SCarolineConcatto !DEF: /m1/test PUBLIC (Subroutine) Subprogram 12864ab3302SCarolineConcatto subroutine test 12964ab3302SCarolineConcatto !REF: /m1/forward 13064ab3302SCarolineConcatto !DEF: /m1/test/object TARGET ObjectEntity TYPE(forward) 13164ab3302SCarolineConcatto type(forward), target :: object 13264ab3302SCarolineConcatto !REF: /m1/test/object 13364ab3302SCarolineConcatto !REF: /m1/base/p 13464ab3302SCarolineConcatto object%p => object 13564ab3302SCarolineConcatto !REF: /m1/test/object 13664ab3302SCarolineConcatto !REF: /m1/base/p 13764ab3302SCarolineConcatto !REF: /m1/forward/n 13864ab3302SCarolineConcatto object%p%n = 666 13964ab3302SCarolineConcatto end subroutine 14064ab3302SCarolineConcattoend module 141