! { dg-do "compile" } ! Abstract Types. ! Check for errors when using abstract types in an inappropriate way. MODULE m USE ISO_C_BINDING IMPLICIT NONE TYPE, ABSTRACT, BIND(C) :: bindc_t ! { dg-error "must not be ABSTRACT" } INTEGER(C_INT) :: x END TYPE bindc_t TYPE, ABSTRACT :: sequence_t ! { dg-error "must not be ABSTRACT" } SEQUENCE INTEGER :: x END TYPE sequence_t TYPE, ABSTRACT :: abst_t INTEGER :: x = 0 END TYPE abst_t TYPE, EXTENDS(abst_t) :: concrete_t INTEGER :: y = 1 END TYPE concrete_t TYPE :: myt TYPE(abst_t) :: comp ! { dg-error "is of the ABSTRACT type 'abst_t'" } END TYPE myt ! This should be ok. TYPE, ABSTRACT, EXTENDS(concrete_t) :: again_abst_t INTEGER :: z = 2 END TYPE again_abst_t CONTAINS TYPE(abst_t) FUNCTION func () ! { dg-error "of the ABSTRACT type 'abst_t'" } END FUNCTION func SUBROUTINE sub (arg) ! { dg-error "is of the ABSTRACT type 'again_abst_t'" } IMPLICIT NONE TYPE(again_abst_t) :: arg arg = again_abst_t () ! { dg-error "Can't construct ABSTRACT type 'again_abst_t'" } END SUBROUTINE sub SUBROUTINE impl () IMPLICIT TYPE(abst_t) (a-z) ! { dg-error "ABSTRACT type 'abst_t' used" } END SUBROUTINE impl END MODULE m ! { dg-final { cleanup-modules "m" } }