1! { dg-do run } 2! Tests that the in-memory representation of a transferred variable 3! propagates properly. 4! 5 implicit none 6 7 integer, parameter :: ip1 = 42 8 integer, parameter :: ip2 = transfer(transfer(ip1, .true.), 0) 9 integer :: i, ai(4) 10 logical :: b 11 12 if (ip2 .ne. ip1) call abort () 13 14 i = transfer(transfer(ip1, .true.), 0) 15 if (i .ne. ip1) call abort () 16 17 i = 42 18 i = transfer(transfer(i, .true.), 0) 19 if (i .ne. ip1) call abort () 20 21 b = transfer(transfer(.true., 3.1415), .true.) 22 if (.not.b) call abort () 23 24 b = transfer(transfer(.false., 3.1415), .true.) 25 if (b) call abort () 26 27 i = 0 28 b = transfer(i, .true.) 29 ! The standard doesn't guarantee here that b will be .false., 30 ! though in gfortran for all targets it will. 31 32 ai = (/ 42, 42, 42, 42 /) 33 ai = transfer (transfer (ai, .false., 4), ai) 34 if (any(ai .ne. 42)) call abort 35 36 ai = transfer (transfer ((/ 42, 42, 42, 42 /), & 37& (/ .false., .false., .false., .false. /)), ai) 38 if (any(ai .ne. 42)) call abort 39end 40