aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/gfortran.dg/abstract_type_5.f03
blob: 6e72882cfeaa421b3b6723ea1745867281e1f1a9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
! { dg-do compile }

! Abstract Types.
! Check for correct handling of abstract-typed base object references.

MODULE m
  IMPLICIT NONE

  TYPE, ABSTRACT :: abstract_t
    INTEGER :: i
  CONTAINS
    PROCEDURE, NOPASS :: proc
    PROCEDURE, NOPASS :: func
  END TYPE abstract_t

  TYPE, EXTENDS(abstract_t) :: concrete_t
  END TYPE concrete_t

CONTAINS

  SUBROUTINE proc ()
    IMPLICIT NONE
    ! Do nothing
  END SUBROUTINE proc

  INTEGER FUNCTION func ()
    IMPLICIT NONE
    func = 1234
  END FUNCTION func

  SUBROUTINE test ()
    IMPLICIT NONE
    TYPE(concrete_t) :: obj

    ! These are ok.
    obj%abstract_t%i = 42
    CALL obj%proc ()
    PRINT *, obj%func ()

    ! These are errors (even though the procedures are not DEFERRED!).
    CALL obj%abstract_t%proc () ! { dg-error "is of ABSTRACT type" }
    PRINT *, obj%abstract_t%func () ! { dg-error "is of ABSTRACT type" }
  END SUBROUTINE test

END MODULE m