1! { dg-do run }
2
3! PR fortran/35681
4! Check that dependencies of MVBITS arguments are resolved correctly by using
5! temporaries if both arguments refer to the same variable.
6
7  integer, dimension(10) :: ila1 = (/1,2,3,4,5,6,7,8,9,10/)
8  integer, dimension(20) :: ila2
9  integer, dimension(10), target :: ila3
10  integer, pointer :: ila3_ptr(:)
11  integer, parameter :: SHOULD_BE(10) = (/17,18,11,4,13,22,7,16,9,18/)
12  integer, parameter :: INDEX_VECTOR(10) = (/9,9,6,2,4,9,2,9,6,10/)
13
14  ila2(2:20:2) = ila1
15  ila3 = ila1
16
17  ! Argument is already packed.
18  call mvbits (ila1(INDEX_VECTOR), 2, 4, ila1, 3)
19  write (*,'(10(I3))') ila1
20  if (any (ila1 /= SHOULD_BE)) STOP 1
21
22  ! Argument is not packed.
23  call mvbits (ila2(2*INDEX_VECTOR), 2, 4, ila2(2:20:2), 3)
24  write (*,'(10(I3))') ila2(2:20:2)
25  if (any (ila2(2:20:2) /= SHOULD_BE)) STOP 2
26
27  ! Pointer and target
28  ila3_ptr => ila3
29  call mvbits (ila3(INDEX_VECTOR), 2, 4, ila3_ptr, 3)
30  write (*,'(10(I3))') ila3
31  if (any (ila3 /= SHOULD_BE)) STOP 3
32
33  end
34