Mercurial > hg > CbC > CbC_gcc
comparison gcc/testsuite/gfortran.dg/recursive_reference_1.f90 @ 111:04ced10e8804
gcc 7
author | kono |
---|---|
date | Fri, 27 Oct 2017 22:46:09 +0900 |
parents | |
children | 84e7813d76e9 |
comparison
equal
deleted
inserted
replaced
68:561a7518be6b | 111:04ced10e8804 |
---|---|
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 ! | |
10 program 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 () | |
14 contains | |
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 | |
50 end program test |