1! { dg-do run } 2! 3! Verifying the runtime behavior of the intrinsic function EXTENDS_TYPE_OF. 4! 5! Contributed by Janus Weil <janus@gcc.gnu.org> 6 7 implicit none 8 9 intrinsic :: extends_type_of 10 11 type :: t1 12 integer :: i = 42 13 end type 14 15 type, extends(t1) :: t2 16 integer :: j = 43 17 end type 18 19 type, extends(t2) :: t3 20 class(t1),pointer :: cc 21 end type 22 23 class(t1), pointer :: c1,c2 24 type(t1), target :: x 25 type(t2), target :: y 26 type(t3), target :: z 27 28 c1 => x 29 c2 => y 30 z%cc => y 31 32 if (.not. extends_type_of (c1, c1)) STOP 1 33 if ( extends_type_of (c1, c2)) STOP 2 34 if (.not. extends_type_of (c2, c1)) STOP 3 35 36 if (.not. extends_type_of (x, x)) STOP 4 37 if ( extends_type_of (x, y)) STOP 5 38 if (.not. extends_type_of (y, x)) STOP 6 39 40 if (.not. extends_type_of (c1, x)) STOP 7 41 if ( extends_type_of (c1, y)) STOP 8 42 if (.not. extends_type_of (x, c1)) STOP 9 43 if (.not. extends_type_of (y, c1)) STOP 10 44 45 if (.not. extends_type_of (z, c1)) STOP 11 46 if ( extends_type_of (z%cc, z)) STOP 12 47 48end 49