1 C { dg-options "-fprofile-arcs -ftest-coverage" }
2 C { dg-do run { target native } }
4 C Test gcov reports for line counts and branch and call return percentages
5 C for various Fortran 77 constructs to catch basic regressions in the
12 integer lpall, ieall, gtall
13 integer lpval, ieval, gtval
16 lpval = lpall() ! count(1)
18 ieval = ieall() ! count(1)
20 gtval = gtall() ! count(1)
22 if ((lpval .ne. 1) .or. (ieval .ne. 1) .or. (gtval .ne. 1)) then
28 C Pass a value through a function to thwart optimization.
29 integer function foo(i)
35 C Test various flavors of GOTO and compare results against expected values.
36 integer function gtall()
38 integer gt1, gt2, gt3, gt4, gt5
44 gtval = gtval + gt1(0) ! count(1)
46 gtval = gtval + gt1(1) ! count(1)
49 if (gtval .ne. 3) then ! count(1)
51 print *,"gtall part 1: ", gtval, 3
57 gtval = gtval + gt2(9) ! count(1)
59 gtval = gtval + gt2(20) ! count(1)
62 if (gtval .ne. 12) then ! count(1)
64 print *,"gtall part 2: ", gtval, 12
70 gtval = gtval + gt3(0) ! count(1)
72 gtval = gtval + gt3(3) ! count(1)
75 if (gtval .ne. 48) then ! count(1)
78 print *,"gtall part 3: ", gtval, 48
84 gtval = gtval + gt4(1) ! count(1)
86 gtval = gtval + gt4(2) ! count(1)
88 gtval = gtval + gt4(3) ! count(1)
91 if (gtval .ne. 14) then ! count(1)
93 print *,"gtall part 4: ", gtval, 14
99 gtval = gtval + gt5(0) ! count(1)
101 gtval = gtval + gt5(-1) ! count(1)
103 gtval = gtval + gt5(5) ! count(1)
106 if (gtval .ne. 14) then ! count(1)
108 print *,"gtall part 5: ", gtval, 14
114 integer function gt1(f)
118 if (f .ne. 0) goto 100 ! count(2)
122 100 gt1 = 2 ! count(1)
123 101 continue ! count(2)
126 C Test simple GOTO again, this time out of a DO loop.
127 integer function gt2(f)
134 if (i .eq. f) goto 100 ! count(19)
138 100 gt2 = 8 ! count(1)
139 101 continue ! count(2)
142 C Test computed GOTO.
143 integer function gt3(i)
146 goto (101, 102, 103, 104), i ! count(2)
153 103 gt3 = 16 ! count(1)
157 105 gt3 = gt3 * 2 ! count(2)
160 C Test assigned GOTO.
161 integer function gt4(i)
165 assign 101 to label ! count(3)
166 if (i .eq. 2) assign 102 to label ! count(3)
167 if (i .eq. 3) assign 103 to label ! count(3)
168 goto label, (101, 102, 103) ! count(3)
169 101 gt4 = 1 ! count(1)
171 102 gt4 = 2 ! count(1)
173 103 gt4 = 4 ! count(1)
174 104 gt4 = gt4 * 2 ! count(3)
177 C Test arithmetic IF (bundled with the GOTO variants).
178 integer function gt5(i)
183 if (i) 101, 102, 103 ! count(3)
185 101 gt5 = 2 ! count(1)
187 102 gt5 = 4 ! count(1)
189 103 gt5 = 8 ! count(1)
190 104 continue ! count(3)
193 C Run all of the loop tests and check results against expected values.
194 integer function lpall()
200 loopval = 0 ! count(1)
202 loopval = loopval + loop1(1,0) ! count(1)
204 loopval = loopval + loop1(1,2) ! count(1)
206 loopval = loopval + loop1(1,7) ! count(1)
208 if (loopval .ne. 12) then ! count(1)
209 print *,"lpall part 1: ", loopval, 12
213 loopval = 0 ! count(1)
215 loopval = loopval + loop2(1,0,0,0) ! count(1)
217 loopval = loopval + loop2(1,1,0,0) ! count(1)
219 loopval = loopval + loop2(1,1,3,0) ! count(1)
221 loopval = loopval + loop2(1,1,3,1) ! count(1)
223 loopval = loopval + loop2(1,3,1,5) ! count(1)
225 loopval = loopval + loop2(1,3,7,3) ! count(1)
227 if (loopval .ne. 87) then ! count(1)
228 print *,"lpall part 2: ", loopval, 87
233 C Test a simple DO loop.
234 integer function loop1(r,n)
242 loop1 = loop1 + 1 ! count(9)
246 C Test nested DO loops.
247 integer function loop2(r, l, m, n)
259 loop2 = loop2 + 1 ! count(81)
265 C Test various combinations of IF-THEN-ELSE and check results against
267 integer function ieall()
269 integer ie1, ie2, ie3
274 ieval = ieval + ie1(0,2) ! count(1)
275 ieval = ieval + ie1(0,0) ! count(1)
276 ieval = ieval + ie1(1,2) ! count(1)
277 ieval = ieval + ie1(10,2) ! count(1)
278 ieval = ieval + ie1(11,11) ! count(1)
279 if (ieval .ne. 31) then ! count(1)
280 print *,"ieall part 1: ", ieval, 31
285 ieval = ieval + ie2(0) ! count(1)
286 ieval = ieval + ie2(2) ! count(1)
287 ieval = ieval + ie2(2) ! count(1)
288 ieval = ieval + ie2(2) ! count(1)
289 ieval = ieval + ie2(3) ! count(1)
290 ieval = ieval + ie2(3) ! count(1)
291 if (ieval .ne. 23) then ! count(1)
292 print *,"ieall part 2: ", ieval, 23
297 ieval = ieval + ie3(11,19) ! count(1)
298 ieval = ieval + ie3(25,27) ! count(1)
299 ieval = ieval + ie3(11,22) ! count(1)
300 ieval = ieval + ie3(11,10) ! count(1)
301 ieval = ieval + ie3(21,32) ! count(1)
302 ieval = ieval + ie3(21,20) ! count(1)
303 ieval = ieval + ie3(1,2) ! count(1)
304 ieval = ieval + ie3(32,31) ! count(1)
305 ieval = ieval + ie3(3,0) ! count(1)
306 ieval = ieval + ie3(0,47) ! count(1)
307 ieval = ieval + ie3(65,65) ! count(1)
308 if (ieval .ne. 246) then ! count(1)
309 print *,"ieall part 3: ", ieval, 246
315 integer function ie1(i,j)
322 if (i .ne. 0) then ! count(5)
324 if (j .ne. 0) then ! count(3)
326 ie1 = foo(4) ! count(3)
332 if (j .ne. 0) then ! count(2)
334 ie1 = foo(1) ! count(1)
336 ie1 = foo(2) ! count(1)
340 if (i .gt. j) then ! count(5)
345 if (i .gt. 10) then ! count(5)
347 if (j .gt. 10) then ! count(1)
349 ie1 = foo(ie1*4) ! count(1)
354 C Test a series of simple IF-THEN statements.
355 integer function ie2(i)
362 if (i .eq. 0) then ! count(6)
364 ie2 = foo(1) ! count(1)
367 if (i .eq. 1) then ! count(6)
372 if (i .eq. 2) then ! count(6)
374 ie2 = foo(2) ! count(3)
377 if (i .eq. 3) then ! count(6)
379 ie2 = foo(8) ! count(2)
382 if (i .eq. 4) then ! count(6)
389 C Test nested IF statements and IF with compound expressions.
390 integer function ie3(i,j)
397 if ((i .gt. 10) .and. (j .gt. i) .and. (j .lt. 20)) then ! count(11)
399 ie3 = foo(16) ! count(1)
402 if (i .gt. 20) then ! count(11)
404 if (j .gt. i) then ! count(5)
406 if (j .lt. 30) then ! count(2)
408 ie3 = foo(32) ! count(1)
413 if ((i .eq. 3) .or. (j .eq. 47) .or. (i .eq.j)) then ! count(11)
415 ie3 = foo(64) ! count(3)
419 C { dg-final { run-gcov branches calls { -b gcov-1.f } } }