diff options
Diffstat (limited to 'gcc/testsuite/gfortran.dg/recursive_check_14.f90')
-rw-r--r-- | gcc/testsuite/gfortran.dg/recursive_check_14.f90 | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/gcc/testsuite/gfortran.dg/recursive_check_14.f90 b/gcc/testsuite/gfortran.dg/recursive_check_14.f90 new file mode 100644 index 000000000..e68e5fc56 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/recursive_check_14.f90 @@ -0,0 +1,40 @@ +! { dg-do run } +! { dg-options "-fcheck=recursion" } +! +! PR fortran/39577 +! +! Recursive but valid program +! Contributed by Dominique Dhumieres +! +recursive function fac(i) result (res) + integer :: i, j, k, res + k = 1 + goto 100 +entry bifac(i,j) result (res) + k = j +100 continue + if (i < k) then + res = 1 + else + res = i * bifac(i-k,k) + end if +end function + +program test +interface + recursive function fac(n) result (res) + integer :: res + integer :: n + end function fac + recursive function bifac(m,n) result (res) + integer :: m, n, res + end function bifac +end interface + + print *, fac(5) + print *, bifac(5,2) + print*, fac(6) + print *, bifac(6,2) + print*, fac(0) + print *, bifac(1,2) +end program test |