summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gfortran.dg/transfer_intrinsic_2.f90
blob: 686c0605df28a801f38bfc4205c36e115e8dc143 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
! { dg-do run }
!
! Check the fix for PR34955 in which three bytes would be copied
! from bytes by TRANSFER, instead of the required two and the
! resulting string length would be incorrect.
!
! Contributed by Dominique Dhumieres  <dominiq@lps.ens.fr>
!
  character(len = 1)  :: string = "z"
  character(len = 20) :: tmp = ""
  tmp = Upper ("abcdefgh")
  if (trim(tmp) .ne. "ab") call abort ()
contains
  Character (len = 20) Function Upper (string)
    Character(len = *) string
    integer :: ij
    i = size (transfer (string,"xy",len (string)))
    if (i /= len (string)) call abort ()
    Upper = ""
    Upper(1:2) = &
    transfer (merge (transfer (string,"xy",len (string)),    &
      string(1:2), .true.), "xy")
    return
  end function Upper
end