! RUN: %S/test_errors.sh %s %t %f18 ! C737 If EXTENDS appears and the type being defined has a potential ! subobject component of type EVENT_TYPE or LOCK_TYPE from the intrinsic ! module ISO_FORTRAN_ENV, its parent type shall be EVENT_TYPE or LOCK_TYPE ! or have a potential subobject component of type EVENT_TYPE or LOCK_TYPE. module not_iso_fortran_env type event_type end type type lock_type end type end module subroutine C737_a() use iso_fortran_env type lockGrandParentType type(lock_type) :: grandParentField end type lockGrandParentType type, extends(lockGrandParentType) :: lockParentType real :: parentField end type lockParentType type eventParentType type(event_type) :: parentField end type eventParentType type noLockParentType end type noLockParentType type, extends(lockParentType) :: goodChildType1 type(lock_type) :: childField end type goodChildType1 type, extends(lockParentType) :: goodChildType2 type(event_type) :: childField end type goodChildType2 type, extends(lock_type) :: goodChildType3 type(event_type) :: childField end type goodChildType3 type, extends(event_type) :: goodChildType4 type(lock_type) :: childField end type goodChildType4 !ERROR: Type 'badchildtype1' has an EVENT_TYPE or LOCK_TYPE component, so the type at the base of its type extension chain ('nolockparenttype') must either have an EVENT_TYPE or LOCK_TYPE component, or be EVENT_TYPE or LOCK_TYPE type, extends(noLockParentType) :: badChildType1 type(lock_type) :: childField end type badChildType1 !ERROR: Type 'badchildtype2' has an EVENT_TYPE or LOCK_TYPE component, so the type at the base of its type extension chain ('nolockparenttype') must either have an EVENT_TYPE or LOCK_TYPE component, or be EVENT_TYPE or LOCK_TYPE type, extends(noLockParentType) :: badChildType2 type(event_type) :: childField end type badChildType2 !ERROR: Type 'badchildtype3' has an EVENT_TYPE or LOCK_TYPE component, so the type at the base of its type extension chain ('nolockparenttype') must either have an EVENT_TYPE or LOCK_TYPE component, or be EVENT_TYPE or LOCK_TYPE type, extends(noLockParentType) :: badChildType3 type(lockParentType) :: childField end type badChildType3 !ERROR: Type 'badchildtype4' has an EVENT_TYPE or LOCK_TYPE component, so the type at the base of its type extension chain ('nolockparenttype') must either have an EVENT_TYPE or LOCK_TYPE component, or be EVENT_TYPE or LOCK_TYPE type, extends(noLockParentType) :: badChildType4 type(eventParentType) :: childField end type badChildType4 end subroutine C737_a subroutine C737_b() use not_iso_fortran_env type lockParentType type(lock_type) :: parentField end type lockParentType type noLockParentType end type noLockParentType ! actually OK since this is not the predefined lock_type type, extends(noLockParentType) :: notBadChildType1 type(lock_type) :: childField end type notBadChildType1 ! actually OK since this is not the predefined event_type type, extends(noLockParentType) :: notBadChildType2 type(event_type) :: childField end type notBadChildType2 end subroutine C737_b