1! { dg-do compile } 2! Tests the patch for PR27613, in which directly recursive, scalar 3! functions were generating an "unclassifiable statement" error 4! for the recursive statement(s). This was subsequently determined 5! to be wrong code and the error on 'bad_stuff' was removed. 6! See 12.5.2.1 of the standard and PR30876. 7! 8! Based on PR testcase by Nicolas Bock <nicolasbock@gmail.com> 9! 10program test 11 if (original_stuff(1) .ne. 5) call abort () 12 if (scalar_stuff(-4) .ne. 10) call abort () 13 if (any (array_stuff((/-19,-30/)) .ne. (/25,25/))) call abort () 14contains 15 recursive function original_stuff(n) 16 integer :: original_stuff 17 integer :: n 18 original_stuff = 1 19 if(n < 5) then 20 original_stuff = original_stuff + original_stuff (n+1) ! { dg-error "name of a recursive function" } 21 endif 22 end function original_stuff 23 24 recursive function scalar_stuff(n) result (tmp) 25 integer :: tmp 26 integer :: n 27 tmp = 1 28 if(n < 5) then 29 tmp = tmp + scalar_stuff (n+1) 30 endif 31 end function scalar_stuff 32 33 recursive function array_stuff(n) result (tmp) 34 integer :: tmp (2) 35 integer :: n (2) 36 tmp = 1 37 if(maxval (n) < 5) then 38 tmp = tmp + array_stuff (n+1) 39 endif 40 end function array_stuff 41 42 recursive function bad_stuff(n) 43 integer :: bad_stuff (2) 44 integer :: n(2) 45 bad_stuff = 1 46 if(maxval (n) < 5) then 47 bad_stuff = bad_stuff + bad_stuff (n+1) 48 endif 49 end function bad_stuff 50end program test 51