xref: /llvm-project/flang/test/Semantics/abstract01.f90 (revision 4052c50122a1f7e64a65e1b391cc37b5cccb2662)
1! RUN: %python %S/test_errors.py %s %flang_fc1
2! C911 - abstract derived type can be used only when polymorphic
3program test
4  type, abstract :: abstract
5    integer :: j
6  end type
7  type, extends(abstract) :: concrete
8    integer :: k
9    class(concrete), allocatable :: a(:)
10  end type
11  type(concrete) :: x(2)
12  call sub1(x(1)) ! ok
13  call sub2(x) ! ok
14  call sub1(x(1)%a(1)) ! ok
15  call sub2(x(1)%a) ! ok
16  !ERROR: Reference to object with abstract derived type 'abstract' must be polymorphic
17  call sub1(x(1)%abstract) ! bad
18  !ERROR: Reference to object with abstract derived type 'abstract' must be polymorphic
19  call sub2(x%abstract) ! bad
20  !ERROR: Reference to object with abstract derived type 'abstract' must be polymorphic
21  call sub1(x(1)%a(1)%abstract) ! bad
22  !ERROR: Reference to object with abstract derived type 'abstract' must be polymorphic
23  call sub2(x(1)%a%abstract) ! bad
24 contains
25  subroutine sub1(d)
26    class(abstract) d
27  end subroutine
28  subroutine sub2(d)
29    class(abstract) d(:)
30  end subroutine
31end
32