blob: 42ac963face7f2e021f472cc6d5cab63c34e89d9 (
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
46
|
! { 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
! { dg-final { cleanup-modules "m" } }
|