1! { dg-do run { target fd_truncate } }
2! PR43605 FTELL intrinsic returns incorrect position
3! Contributed by Janne Blomqvist, Manfred Schwarb
4! and Dominique d'Humieres.
5program ftell_3
6  integer :: i, j
7  character(1) :: ch
8  character(len=99) :: buffer
9  open(10, form='formatted', position='rewind')
10  write(10, '(a)') '123456'
11  write(10, '(a)') '789'
12  write(10, '(a)') 'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC'
13  write(10, '(a)') 'DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD'
14  rewind(10)
15  read(10, '(a)') buffer
16  call ftell(10, i)
17! Expected: On '\n' systems: 7, on \r\n systems: 8
18  if(i /= 7 .and. i /= 8) then
19    STOP 1
20  end if
21  read(10,'(a)') buffer
22  if (trim(buffer) /= "789") then
23     STOP 1
24  end if
25  call ftell(10,j)
26  close(10)
27  open(10, access="stream")
28! Expected: On '\n' systems: 11, on \r\n systems: 13
29  if (i == 7) then
30    read(10, pos=7) ch
31    if (ch /= char(10)) STOP 2
32    if (j /= 11) STOP 3
33  end if
34  if (i == 8) then
35    read(10, pos=7) ch
36    if (ch /= char(13)) STOP 4
37    read(10) ch
38    if (ch /= char(10)) STOP 5
39    if (j /= 13) STOP 6
40  end if
41  close(10, status="delete")
42end program ftell_3
43