! RUN: %S/test_errors.sh %s %t %f18 ! Error tests for recursive use of derived types. ! C744 If neither the POINTER nor the ALLOCATABLE attribute is specified, the ! declaration-type-spec in the component-def-stmt shall specify an intrinsic ! type or a previously defined derived type. program main type :: recursive1 !ERROR: Recursive use of the derived type requires POINTER or ALLOCATABLE type(recursive1) :: bad1 type(recursive1), pointer :: ok1 type(recursive1), allocatable :: ok2 !ERROR: Recursive use of the derived type requires POINTER or ALLOCATABLE !ERROR: CLASS entity 'bad2' must be a dummy argument or have ALLOCATABLE or POINTER attribute class(recursive1) :: bad2 class(recursive1), pointer :: ok3 class(recursive1), allocatable :: ok4 end type recursive1 type :: recursive2(kind,len) integer, kind :: kind integer, len :: len !ERROR: Recursive use of the derived type requires POINTER or ALLOCATABLE !ERROR: An automatic variable or component must not be initialized type(recursive2(kind,len)) :: bad1 type(recursive2(kind,len)), pointer :: ok1 type(recursive2(kind,len)), allocatable :: ok2 !ERROR: Recursive use of the derived type requires POINTER or ALLOCATABLE !ERROR: An automatic variable or component must not be initialized !ERROR: CLASS entity 'bad2' must be a dummy argument or have ALLOCATABLE or POINTER attribute class(recursive2(kind,len)) :: bad2 class(recursive2(kind,len)), pointer :: ok3 class(recursive2(kind,len)), allocatable :: ok4 end type recursive2 type :: recursive3(kind,len) integer, kind :: kind = 1 integer, len :: len = 2 !ERROR: Recursive use of the derived type requires POINTER or ALLOCATABLE type(recursive3) :: bad1 type(recursive3), pointer :: ok1 type(recursive3), allocatable :: ok2 !ERROR: Recursive use of the derived type requires POINTER or ALLOCATABLE !ERROR: CLASS entity 'bad2' must be a dummy argument or have ALLOCATABLE or POINTER attribute class(recursive3) :: bad2 class(recursive3), pointer :: ok3 class(recursive3), allocatable :: ok4 end type recursive3 !ERROR: Derived type 'recursive4' cannot extend itself type, extends(recursive4) :: recursive4 end type recursive4 end program main