xref: /llvm-project/flang/test/Semantics/symbol17.f90 (revision eabae4cf57b9e7429db27fdfd3016d31901fa2ea)
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