1! { dg-do run } 2! 3! CO_BROADCAST 4! 5program test 6 implicit none 7 intrinsic co_broadcast 8 9 type t 10 integer :: i 11 character(len=1) :: c 12 real(8) :: x(3), y(3) 13 end type t 14 15 integer :: i, j(10), stat 16 complex :: a(5,5) 17 character(kind=1, len=5) :: str1, errstr 18 character(kind=4, len=8) :: str2(2) 19 type(t) :: dt(4) 20 21 i = 1 22 j = 55 23 a = 99.0 24 str1 = 1_"XXXXX" 25 str2 = 4_"YYYYYYYY" 26 dt = t(1, 'C', [1.,2.,3.], [3,3,3]) 27 errstr = "ZZZZZ" 28 29 if (this_image() == num_images()) then 30 i = 2 31 j = 66 32 a = -99.0 33 str1 = 1_"abcd" 34 str2 = 4_"12 3 4 5" 35 dt = t(-1, 'a', [3.,1.,8.], [99,24,5]) 36 end if 37 sync all 38 39 call co_broadcast(i, source_image=num_images(), stat=stat, errmsg=errstr) 40 if (stat /= 0) call abort() 41 if (errstr /= "ZZZZZ") call abort() 42 if (i /= 2) call abort() 43 44 call co_broadcast(j, source_image=num_images(), stat=stat, errmsg=errstr) 45 if (stat /= 0) call abort() 46 if (errstr /= "ZZZZZ") call abort() 47 if (any (j /= 66)) call abort 48 49 call co_broadcast(a, source_image=num_images(), stat=stat, errmsg=errstr) 50 if (stat /= 0) call abort() 51 if (errstr /= "ZZZZZ") call abort() 52 if (any (a /= -99.0)) call abort 53 54 call co_broadcast(str1, source_image=num_images(), stat=stat, errmsg=errstr) 55 if (stat /= 0) call abort() 56 if (errstr /= "ZZZZZ") call abort() 57 if (str1 /= "abcd") call abort() 58 59 call co_broadcast(str2, source_image=num_images(), stat=stat, errmsg=errstr) 60 if (stat /= 0) call abort() 61 if (errstr /= "ZZZZZ") call abort() 62 if (any (str2 /= 4_"12 3 4 5")) call abort 63 64 call co_broadcast(dt, source_image=num_images(), stat=stat, errmsg=errstr) 65 if (stat /= 0) call abort() 66 if (errstr /= "ZZZZZ") call abort() 67 if (any (dt(:)%i /= -1)) call abort() 68 if (any (dt(:)%c /= 'a')) call abort() 69 if (any (dt(:)%x(1) /= 3.)) call abort() 70 if (any (dt(:)%x(2) /= 1.)) call abort() 71 if (any (dt(:)%x(3) /= 8.)) call abort() 72 if (any (dt(:)%y(1) /= 99.)) call abort() 73 if (any (dt(:)%y(2) /= 24.)) call abort() 74 if (any (dt(:)%y(3) /= 5.)) call abort() 75 76 sync all 77 dt = t(1, 'C', [1.,2.,3.], [3,3,3]) 78 sync all 79 if (this_image() == num_images()) then 80 str2 = 4_"001122" 81 dt(2:4) = t(-2, 'i', [9.,2.,3.], [4,44,321]) 82 end if 83 84 call co_broadcast(str2(::2), source_image=num_images(), stat=stat, & 85 errmsg=errstr) 86 if (stat /= 0) call abort() 87 if (errstr /= "ZZZZZ") call abort() 88 if (str2(1) /= 4_"001122") call abort() 89 if (this_image() == num_images()) then 90 if (str2(1) /= 4_"001122") call abort() 91 else 92 if (str2(2) /= 4_"12 3 4 5") call abort() 93 end if 94 95 call co_broadcast(dt(2::2), source_image=num_images(), stat=stat, & 96 errmsg=errstr) 97 if (stat /= 0) call abort() 98 if (errstr /= "ZZZZZ") call abort() 99 if (this_image() == num_images()) then 100 if (any (dt(1:1)%i /= 1)) call abort() 101 if (any (dt(1:1)%c /= 'C')) call abort() 102 if (any (dt(1:1)%x(1) /= 1.)) call abort() 103 if (any (dt(1:1)%x(2) /= 2.)) call abort() 104 if (any (dt(1:1)%x(3) /= 3.)) call abort() 105 if (any (dt(1:1)%y(1) /= 3.)) call abort() 106 if (any (dt(1:1)%y(2) /= 3.)) call abort() 107 if (any (dt(1:1)%y(3) /= 3.)) call abort() 108 109 if (any (dt(2:)%i /= -2)) call abort() 110 if (any (dt(2:)%c /= 'i')) call abort() 111 if (any (dt(2:)%x(1) /= 9.)) call abort() 112 if (any (dt(2:)%x(2) /= 2.)) call abort() 113 if (any (dt(2:)%x(3) /= 3.)) call abort() 114 if (any (dt(2:)%y(1) /= 4.)) call abort() 115 if (any (dt(2:)%y(2) /= 44.)) call abort() 116 if (any (dt(2:)%y(3) /= 321.)) call abort() 117 else 118 if (any (dt(1::2)%i /= 1)) call abort() 119 if (any (dt(1::2)%c /= 'C')) call abort() 120 if (any (dt(1::2)%x(1) /= 1.)) call abort() 121 if (any (dt(1::2)%x(2) /= 2.)) call abort() 122 if (any (dt(1::2)%x(3) /= 3.)) call abort() 123 if (any (dt(1::2)%y(1) /= 3.)) call abort() 124 if (any (dt(1::2)%y(2) /= 3.)) call abort() 125 if (any (dt(1::2)%y(3) /= 3.)) call abort() 126 127 if (any (dt(2::2)%i /= -2)) call abort() 128 if (any (dt(2::2)%c /= 'i')) call abort() 129 if (any (dt(2::2)%x(1) /= 9.)) call abort() 130 if (any (dt(2::2)%x(2) /= 2.)) call abort() 131 if (any (dt(2::2)%x(3) /= 3.)) call abort() 132 if (any (dt(2::2)%y(1) /= 4.)) call abort() 133 if (any (dt(2::2)%y(2) /= 44.)) call abort() 134 if (any (dt(2::2)%y(3) /= 321.)) call abort() 135 endif 136end program test 137