xref: /llvm-project/flang/test/Semantics/resolve87.f90 (revision 6c1ac141d3c98af9738bc77fcb55602cbff7751f)
1*6c1ac141SIvan Zhechev! RUN: %python %S/test_errors.py %s %flang_fc1
22b790490SPete Steinfeld! C737 If EXTENDS appears and the type being defined has a potential
32b790490SPete Steinfeld! subobject component of type EVENT_TYPE or LOCK_TYPE from the intrinsic
42b790490SPete Steinfeld! module ISO_FORTRAN_ENV, its parent type shall be EVENT_TYPE or LOCK_TYPE
52b790490SPete Steinfeld! or have a potential subobject component of type EVENT_TYPE or LOCK_TYPE.
62b790490SPete Steinfeldmodule not_iso_fortran_env
72b790490SPete Steinfeld  type event_type
82b790490SPete Steinfeld  end type
92b790490SPete Steinfeld
102b790490SPete Steinfeld  type lock_type
112b790490SPete Steinfeld  end type
122b790490SPete Steinfeldend module
132b790490SPete Steinfeld
142b790490SPete Steinfeldsubroutine C737_a()
152b790490SPete Steinfeld  use iso_fortran_env
162b790490SPete Steinfeld
172b790490SPete Steinfeld  type lockGrandParentType
182b790490SPete Steinfeld    type(lock_type) :: grandParentField
192b790490SPete Steinfeld  end type lockGrandParentType
202b790490SPete Steinfeld
212b790490SPete Steinfeld  type, extends(lockGrandParentType) :: lockParentType
222b790490SPete Steinfeld    real :: parentField
232b790490SPete Steinfeld  end type lockParentType
242b790490SPete Steinfeld
252b790490SPete Steinfeld  type eventParentType
262b790490SPete Steinfeld    type(event_type) :: parentField
272b790490SPete Steinfeld  end type eventParentType
282b790490SPete Steinfeld
292b790490SPete Steinfeld  type noLockParentType
302b790490SPete Steinfeld  end type noLockParentType
312b790490SPete Steinfeld
322b790490SPete Steinfeld  type, extends(lockParentType) :: goodChildType1
332b790490SPete Steinfeld    type(lock_type) :: childField
342b790490SPete Steinfeld  end type goodChildType1
352b790490SPete Steinfeld
362b790490SPete Steinfeld  type, extends(lockParentType) :: goodChildType2
372b790490SPete Steinfeld    type(event_type) :: childField
382b790490SPete Steinfeld  end type goodChildType2
392b790490SPete Steinfeld
402b790490SPete Steinfeld  type, extends(lock_type) :: goodChildType3
412b790490SPete Steinfeld    type(event_type) :: childField
422b790490SPete Steinfeld  end type goodChildType3
432b790490SPete Steinfeld
442b790490SPete Steinfeld  type, extends(event_type) :: goodChildType4
452b790490SPete Steinfeld    type(lock_type) :: childField
462b790490SPete Steinfeld  end type goodChildType4
472b790490SPete Steinfeld
482b790490SPete Steinfeld  !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
492b790490SPete Steinfeld  type, extends(noLockParentType) :: badChildType1
502b790490SPete Steinfeld    type(lock_type) :: childField
512b790490SPete Steinfeld  end type badChildType1
522b790490SPete Steinfeld
532b790490SPete Steinfeld  !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
542b790490SPete Steinfeld  type, extends(noLockParentType) :: badChildType2
552b790490SPete Steinfeld    type(event_type) :: childField
562b790490SPete Steinfeld  end type badChildType2
572b790490SPete Steinfeld
582b790490SPete Steinfeld  !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
592b790490SPete Steinfeld  type, extends(noLockParentType) :: badChildType3
602b790490SPete Steinfeld    type(lockParentType) :: childField
612b790490SPete Steinfeld  end type badChildType3
622b790490SPete Steinfeld
632b790490SPete Steinfeld  !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
642b790490SPete Steinfeld  type, extends(noLockParentType) :: badChildType4
652b790490SPete Steinfeld    type(eventParentType) :: childField
662b790490SPete Steinfeld  end type badChildType4
672b790490SPete Steinfeld
682b790490SPete Steinfeldend subroutine C737_a
692b790490SPete Steinfeld
702b790490SPete Steinfeldsubroutine C737_b()
712b790490SPete Steinfeld  use not_iso_fortran_env
722b790490SPete Steinfeld
732b790490SPete Steinfeld  type lockParentType
742b790490SPete Steinfeld    type(lock_type) :: parentField
752b790490SPete Steinfeld  end type lockParentType
762b790490SPete Steinfeld
772b790490SPete Steinfeld  type noLockParentType
782b790490SPete Steinfeld  end type noLockParentType
792b790490SPete Steinfeld
802b790490SPete Steinfeld  ! actually OK since this is not the predefined lock_type
812b790490SPete Steinfeld  type, extends(noLockParentType) :: notBadChildType1
822b790490SPete Steinfeld    type(lock_type) :: childField
832b790490SPete Steinfeld  end type notBadChildType1
842b790490SPete Steinfeld
852b790490SPete Steinfeld  ! actually OK since this is not the predefined event_type
862b790490SPete Steinfeld  type, extends(noLockParentType) :: notBadChildType2
872b790490SPete Steinfeld    type(event_type) :: childField
882b790490SPete Steinfeld  end type notBadChildType2
892b790490SPete Steinfeld
902b790490SPete Steinfeldend subroutine C737_b
91