else
{
gfc_conv_expr (&se, var);
-// gcc_assert (se.pre.head == NULL_TREE && se.post.head == NULL_TREE);
array = se.expr;
/* No copy back needed, hence set attr's allocatable/pointer
--- /dev/null
+! { dg-do compile }
+!
+! Check that the data reference preliminary code is properly
+! generated and accepted by the finalization handling code.
+
+module m
+ implicit none
+ type t
+ integer :: i
+ contains
+ final :: finalize_t
+ end type t
+ logical :: finalize_called = .false.
+contains
+ subroutine finalize_t(a)
+ type(t) :: a
+ finalize_called = .true.
+ end subroutine finalize_t
+end module m
+program p
+ use m
+ type u
+ type(t), allocatable :: ta
+ end type u
+ class(u), allocatable :: c(:)
+ integer, allocatable :: a(:), b(:)
+ a = [1, 2, 3]
+ b = [3, 5, 1]
+ allocate(c, source = [u(t(1)), u(t(9))])
+ deallocate(c(count(a + b == 4))%ta)
+ if (.not. allocated (c(1)%ta)) stop 11
+ if (allocated (c(2)%ta)) stop 12
+ if (.not. finalize_called) stop 13
+end program p