File: transfer_assumed_size_1.f90

package info (click to toggle)
gcc-arm-none-eabi 15%3A12.2.rel1-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 959,712 kB
  • sloc: cpp: 3,275,382; ansic: 2,061,766; ada: 840,956; f90: 208,513; makefile: 76,132; asm: 73,433; xml: 50,448; exp: 34,146; sh: 32,436; objc: 15,637; fortran: 14,012; python: 11,991; pascal: 6,787; awk: 4,779; perl: 3,054; yacc: 338; ml: 285; lex: 201; haskell: 122
file content (43 lines) | stat: -rw-r--r-- 1,333 bytes parent folder | download | duplicates (3)
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
! { dg-do run }
! Tests the fix for the regression PR34080, in which the character
! length of the assumed length arguments to TRANSFER were getting
! lost.
!
! Drew McCormack <drewmccormack@mac.com>
!
module TransferBug
   type ByteType
      private
      character(len=1)                                  :: singleByte
   end type

   type (ByteType), save                                :: BytesPrototype(1)

contains

   function StringToBytes(v) result (bytes)
      character(len=*), intent(in)                      :: v
      type (ByteType)                                   :: bytes(size(transfer(v, BytesPrototype)))
      bytes = transfer(v, BytesPrototype)
   end function

   subroutine BytesToString(bytes, string)
      type (ByteType), intent(in)                       :: bytes(:)
      character(len=*), intent(out)                     :: string
      character(len=1)                                  :: singleChar(1)
      integer                                           :: numChars
      numChars = size(transfer(bytes,singleChar))
      string = ''
      string = transfer(bytes, string)
      string(numChars+1:) = ''
   end subroutine

end module


program main
   use TransferBug
   character(len=100) :: str
   call BytesToString( StringToBytes('Hi'), str )
   if (trim(str) .ne. "Hi") STOP 1
end program