! { dg-do run } ! ! Check the fix for PR34640 comment 28. ! ! This involves pointer array components that point to components of arrays ! of derived types. ! type var_tables real, pointer :: rvar(:) end type type real_vars real r real :: index end type type(var_tables) :: vtab_r type(real_vars), target :: x(2) real, pointer :: z(:) real :: y(2) x = [real_vars (11.0, 1.0), real_vars (42.0, 2.0)] vtab_r%rvar => x%r if (any (abs (vtab_r%rvar - [11.0, 42.0]) > 1.0e-5)) STOP 1! Check skipping 'index; is OK. y = vtab_r%rvar if (any (abs (y - [11.0, 42.0]) > 1.0e-5)) STOP 2! Check that the component is usable in assignment. call foobar (vtab_r, [11.0, 42.0]) vtab_r = barfoo () call foobar (vtab_r, [111.0, 142.0]) contains subroutine foobar (vtab, array) type(var_tables) :: vtab real :: array (:) if (any (abs (vtab%rvar - array) > 1.0e-5)) STOP 3! Check passing as a dummy. if (abs (vtab%rvar(2) - array(2)) > 1.0e-5) STOP 4! Check component reference. end subroutine function barfoo () result(res) type(var_tables) :: res allocate (res%rvar(2), source = [111.0, 142.0]) ! Check allocation end function end