4 ! Check that dependencies of MVBITS arguments are resolved correctly by using
5 ! temporaries if both arguments refer to the same variable.
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/)
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
)) call abort ()
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
)) call abort ()
29 call mvbits (ila3(INDEX_VECTOR
), 2, 4, ila3_ptr
, 3)
30 write (*,'(10(I3))') ila3
31 if (any (ila3
/= SHOULD_BE
)) call abort ()