PR inline-asm/84742
[official-gcc.git] / gcc / testsuite / gfortran.dg / abstract_type_3.f03
blobe7a9d9b63577952382753b5e51cf4a5cff58751b
1 ! { dg-do compile }
3 ! Abstract Types.
4 ! Check for errors when using abstract types in an inappropriate way.
6 MODULE m
7   USE ISO_C_BINDING
8   IMPLICIT NONE
10   TYPE, ABSTRACT, BIND(C) :: bindc_t ! { dg-error "must not be ABSTRACT" }
11     INTEGER(C_INT) :: x
12   END TYPE bindc_t
14   TYPE, ABSTRACT :: sequence_t ! { dg-error "must not be ABSTRACT" }
15     SEQUENCE
16     INTEGER :: x
17   END TYPE sequence_t
19   TYPE, ABSTRACT :: abst_t
20     INTEGER :: x = 0
21   END TYPE abst_t
23   TYPE, EXTENDS(abst_t) :: concrete_t
24     INTEGER :: y = 1
25   END TYPE concrete_t
27   TYPE :: myt
28     TYPE(abst_t) :: comp ! { dg-error "is of the ABSTRACT type 'abst_t'" }
29   END TYPE myt
31   ! This should be ok.
32   TYPE, ABSTRACT, EXTENDS(concrete_t) :: again_abst_t
33     INTEGER :: z = 2
34   END TYPE again_abst_t
36 CONTAINS
38   TYPE(abst_t) FUNCTION func () ! { dg-error "of the ABSTRACT type 'abst_t'" }
39   END FUNCTION func
41   SUBROUTINE sub (arg) ! { dg-error "is of the ABSTRACT type 'again_abst_t'" }
42     IMPLICIT NONE
43     TYPE(again_abst_t) :: arg
44     arg = again_abst_t () ! { dg-error "Can't construct ABSTRACT type 'again_abst_t'" }
45   END SUBROUTINE sub
47   SUBROUTINE impl ()
48     IMPLICIT TYPE(abst_t) (a-z) ! { dg-error "ABSTRACT type 'abst_t' used" }
49   END SUBROUTINE impl
51 END MODULE m