2017-02-20 Paul Thomas <pault@gcc.gnu.org>
[official-gcc.git] / gcc / testsuite / gfortran.dg / abstract_type_5.f03
blob6e72882cfeaa421b3b6723ea1745867281e1f1a9
1 ! { dg-do compile }
3 ! Abstract Types.
4 ! Check for correct handling of abstract-typed base object references.
6 MODULE m
7   IMPLICIT NONE
9   TYPE, ABSTRACT :: abstract_t
10     INTEGER :: i
11   CONTAINS
12     PROCEDURE, NOPASS :: proc
13     PROCEDURE, NOPASS :: func
14   END TYPE abstract_t
16   TYPE, EXTENDS(abstract_t) :: concrete_t
17   END TYPE concrete_t
19 CONTAINS
21   SUBROUTINE proc ()
22     IMPLICIT NONE
23     ! Do nothing
24   END SUBROUTINE proc
26   INTEGER FUNCTION func ()
27     IMPLICIT NONE
28     func = 1234
29   END FUNCTION func
31   SUBROUTINE test ()
32     IMPLICIT NONE
33     TYPE(concrete_t) :: obj
35     ! These are ok.
36     obj%abstract_t%i = 42
37     CALL obj%proc ()
38     PRINT *, obj%func ()
40     ! These are errors (even though the procedures are not DEFERRED!).
41     CALL obj%abstract_t%proc () ! { dg-error "is of ABSTRACT type" }
42     PRINT *, obj%abstract_t%func () ! { dg-error "is of ABSTRACT type" }
43   END SUBROUTINE test
45 END MODULE m