1! { dg-do run } 2! PR26766 Recursive I/O with internal units 3! Test case derived from example in PR 4! Submitted by Jerry DeLisle <jvdelisle@gcc.gnu.org> 5program pr26766 6 implicit none 7 character (len=8) :: str, tmp 8 write (str, '(a)') bar (1234) 9 if (str.ne."abcd") call abort() 10 str = "wxyz" 11 write (str, '(2a4)') foo (1), bar (1) 12 if (str.ne."abcdabcd") call abort() 13 14contains 15 16 function foo (i) result (s) 17 integer, intent(in) :: i 18 character (len=4) :: s, t 19 if (i < 0) then 20 s = "1234" 21 else 22 ! Internal I/O, allowed recursive in f2003, see section 9.11 23 write (s, '(a)') "abcd" 24 end if 25 end function foo 26 27 function bar (i) result (s) 28 integer, intent(in) :: i 29 character (len=4) :: s, t 30 if (i < 0) then 31 s = "4567" 32 else 33 write (s, '(a)') foo(i) 34 end if 35 end function bar 36 37end program pr26766 38 39 40