Test for gcov output.
authorJanis Johnson <janis@gcc.gnu.org>
Fri, 14 Sep 2001 20:46:45 +0000 (20:46 +0000)
committerJanis Johnson <janis@gcc.gnu.org>
Fri, 14 Sep 2001 20:46:45 +0000 (20:46 +0000)
* g77.dg/gcov: New directory.
* g77.dg/gcov/gcov.exp: New file.
* g77.dg/gcov/gcov-1.f: New test.
* g77.dg/gcov/gcov-1.x: New file.

From-SVN: r45610

gcc/testsuite/g77.dg/gcov/gcov-1.f [new file with mode: 0644]

diff --git a/gcc/testsuite/g77.dg/gcov/gcov-1.f b/gcc/testsuite/g77.dg/gcov/gcov-1.f
new file mode 100644 (file)
index 0000000..d710483
--- /dev/null
@@ -0,0 +1,427 @@
+C { dg-options "-fprofile-arcs -ftest-coverage" }
+C { dg-do run { target native } }
+C
+C Test gcov reports for line counts and branch and call return percentages
+C for various Fortran 77 constructs to catch basic regressions in the
+C functionality.
+
+      program gcov1
+      implicit none
+      integer i,j,k,n
+      integer result
+      integer lpall, ieall, gtall
+      integer lpval, ieval, gtval
+
+                                       ! returns(100)
+      lpval = lpall()                  ! count(1)
+                                       ! returns(100)
+      ieval = ieall()                  ! count(1)
+                                       ! returns(100)
+      gtval = gtall()                  ! count(1)
+                                       ! returns(end)
+      if ((lpval .ne. 1) .or. (ieval .ne. 1) .or. (gtval .ne. 1)) then
+         call abort
+      end if
+      
+      end
+
+C Pass a value through a function to thwart optimization.
+      integer function foo(i)
+      implicit none
+      integer i
+      foo = i                          ! count(18)
+      end
+
+C Test various flavors of GOTO and compare results against expected values.
+      integer function gtall()
+      implicit none
+      integer gt1, gt2, gt3, gt4, gt5
+      integer gtval
+
+      gtall = 1                                ! count(1)
+      gtval = 0                                ! count(1)
+                                       ! returns(100)
+      gtval = gtval + gt1(0)           ! count(1)
+                                       ! returns(100)
+      gtval = gtval + gt1(1)           ! count(1)
+                                       ! returns(end)
+                                       ! branch(0)
+      if (gtval .ne. 3) then           ! count(1)
+                                       ! branch(end)
+         print *,"gtall part 1:  ", gtval, 3
+         gtall = 0
+      end if
+
+      gtval = 0                                ! count(1)
+                                       ! returns(100)
+      gtval = gtval + gt2(9)           ! count(1)
+                                       ! returns(100)
+      gtval = gtval + gt2(20)          ! count(1)
+                                       ! returns(end)
+                                       ! branch(0)
+      if (gtval .ne. 12) then          ! count(1)
+                                       ! branch(end)
+         print *,"gtall part 2:  ", gtval, 12
+         gtall = 0
+      end if
+
+      gtval = 0                                ! count(1)
+                                       ! returns(100)
+      gtval = gtval + gt3(0)           ! count(1)
+                                       ! returns(100)
+      gtval = gtval + gt3(3)           ! count(1)
+                                       ! returns(end)
+                                       ! branch(0)
+      if (gtval .ne. 48) then          ! count(1)
+                                       ! branch(end)
+                                       ! branch(end)
+         print *,"gtall part 3:  ", gtval, 48
+         gtall = 0
+      end if
+
+      gtval = 0                                ! count(1)
+                                       ! returns(100)
+      gtval = gtval + gt4(1)           ! count(1)
+                                       ! returns(100)
+      gtval = gtval + gt4(2)           ! count(1)
+                                       ! returns(100)
+      gtval = gtval + gt4(3)           ! count(1)
+                                       ! returns(end)
+                                       ! branch(0)
+      if (gtval .ne. 14) then          ! count(1)
+                                       ! branch(end)
+         print *,"gtall part 4:  ", gtval, 14
+         gtall = 0
+      end if
+
+      gtval = 0                                ! count(1)
+                                       ! returns(100)
+      gtval = gtval + gt5(0)           ! count(1)
+                                       ! returns(100)
+      gtval = gtval + gt5(-1)          ! count(1)
+                                       ! returns(100)
+      gtval = gtval + gt5(5)           ! count(1)
+                                       ! returns(end)
+                                       ! branch(0)
+      if (gtval .ne. 14) then          ! count(1)
+                                       ! branch(end)
+         print *,"gtall part 5:  ", gtval, 14
+         gtall = 0
+      end if
+      end
+
+C Test simple GOTO.
+      integer function gt1(f)
+      implicit none
+      integer f
+                                       ! branch(50)
+      if (f .ne. 0) goto 100           ! count(2)
+                                       ! branch(end)
+      gt1 = 1                          ! count(1)
+                                       ! branch(100)
+      goto 101                         ! count(1)
+                                       ! branch(end)
+  100 gt1 = 2                          ! count(1)
+  101 continue                         ! count(2)
+      end
+
+C Test simple GOTO again, this time out of a DO loop.
+      integer function gt2(f)
+      implicit none
+      integer f
+      integer i
+                                       ! branch(95)
+      do i=1,10
+                                       ! branch(end)
+         if (i .eq. f) goto 100                ! count(19)
+      end do
+      gt2 = 4                          ! count(1)
+                                       ! branch(100)
+      goto 101                         ! count(1)
+                                       ! branch(end)
+  100 gt2 = 8                          ! count(1)
+  101 continue                         ! count(2)
+      end
+
+C Test computed GOTO.
+      integer function gt3(i)
+      implicit none
+      integer i
+      goto (101, 102, 103, 104), i     ! count(2)
+      gt3 = 8                          ! count(1)
+                                       ! branch(100)
+      goto 105                         ! count(1)
+                                       ! branch(end)
+  101 gt3 = 1024
+      goto 105
+  102 gt3 = 2048
+      goto 105
+  103 gt3 = 16                         ! count(1)
+                                       ! branch(100)
+      goto 105                         ! count(1)
+                                       ! branch(end)
+  104 gt3 = 4096
+      goto 105
+  105 gt3 = gt3 * 2                    ! count(2)
+      end
+
+C Test assigned GOTO.
+      integer function gt4(i)
+      implicit none
+      integer i
+      integer label
+      assign 101 to label              ! count(3)
+      if (i .eq. 2) assign 102 to label        ! count(3)
+      if (i .eq. 3) assign 103 to label        ! count(3)
+      goto label, (101, 102, 103)      ! count(3)
+  101 gt4 = 1                          ! count(1)
+      goto 104                         ! count(1)
+  102 gt4 = 2                          ! count(1)
+      goto 104                         ! count(1)
+  103 gt4 = 4                          ! count(1)
+  104 gt4 = gt4 * 2                    ! count(3)
+      end
+
+C Test arithmetic IF (bundled with the GOTO variants).
+      integer function gt5(i)
+      implicit none
+      integer i
+      gt5 = 1                          ! count(3)
+                                       ! branch(67 50)
+      if (i) 101, 102, 103             ! count(3)
+                                       ! branch(end)
+  101 gt5 = 2                          ! count(1)
+      goto 104                         ! count(1)
+  102 gt5 = 4                          ! count(1)
+      goto 104                         ! count(1)
+  103 gt5 = 8                          ! count(1)
+  104 continue                         ! count(3)
+      end
+
+C Run all of the loop tests and check results against expected values.
+      integer function lpall()
+      implicit none
+      integer loop1, loop2
+      integer loopval
+
+      lpall = 1                                ! count(1)
+      loopval = 0                      ! count(1)
+                                       ! returns(100)
+      loopval = loopval + loop1(1,0)   ! count(1)
+                                       ! returns(100)
+      loopval = loopval + loop1(1,2)   ! count(1)
+                                       ! returns(100)
+      loopval = loopval + loop1(1,7)   ! count(1)
+                                       ! returns(end)
+      if (loopval .ne. 12) then                ! count(1)
+         print *,"lpall part 1:  ", loopval, 12
+         lpall = 0
+      end if
+
+      loopval = 0                              ! count(1)
+                                               ! returns(100)
+      loopval = loopval + loop2(1,0,0,0)       ! count(1)
+                                               ! returns(100)
+      loopval = loopval + loop2(1,1,0,0)       ! count(1)
+                                               ! returns(100)
+      loopval = loopval + loop2(1,1,3,0)       ! count(1)
+                                               ! returns(100)
+      loopval = loopval + loop2(1,1,3,1)       ! count(1)
+                                               ! returns(100)
+      loopval = loopval + loop2(1,3,1,5)       ! count(1)
+                                               ! returns(100)
+      loopval = loopval + loop2(1,3,7,3)       ! count(1)
+                                               ! returns(end)
+      if (loopval .ne. 87) then                        ! count(1)
+         print *,"lpall part 2:  ", loopval, 87
+         lpall = 0
+      end if
+      end
+
+C Test a simple DO loop.
+      integer function loop1(r,n)
+      implicit none
+      integer r,n,i
+
+      loop1 = r                                ! count(3)
+                                       ! branch(75)
+      do i=1,n
+                                       ! branch(end)
+         loop1 = loop1 + 1             ! count(9)
+      end do
+      end
+
+C Test nested DO loops.
+      integer function loop2(r, l, m, n)
+      implicit none
+      integer r,l,m,n
+      integer i,j,k
+      loop2 = r                                ! count(6)
+                                       ! branch(60)
+      do i=1,l
+                                       ! branch(77)
+         do j=1,m
+                                       ! branch(73)
+            do k=1,n
+                                       ! branch(end)
+               loop2 = loop2 + 1       ! count(81)
+            end do
+         end do
+      end do
+      end
+
+C Test various combinations of IF-THEN-ELSE and check results against
+C expected values.
+      integer function ieall()
+      implicit none
+      integer ie1, ie2, ie3
+      integer ieval
+      ieall = 1                                ! count(1)
+      ieval = 0                                ! count(1)
+      
+      ieval = ieval + ie1(0,2)         ! count(1)
+      ieval = ieval + ie1(0,0)         ! count(1)
+      ieval = ieval + ie1(1,2)         ! count(1)
+      ieval = ieval + ie1(10,2)                ! count(1)
+      ieval = ieval + ie1(11,11)       ! count(1)
+      if (ieval .ne. 31) then          ! count(1)
+         print *,"ieall part 1:  ", ieval, 31
+         ieall = 0
+      end if
+
+      ieval = 0        
+      ieval = ieval + ie2(0)           ! count(1)
+      ieval = ieval + ie2(2)           ! count(1)
+      ieval = ieval + ie2(2)           ! count(1)
+      ieval = ieval + ie2(2)           ! count(1)
+      ieval = ieval + ie2(3)           ! count(1)
+      ieval = ieval + ie2(3)           ! count(1)
+      if (ieval .ne. 23) then          ! count(1)
+         print *,"ieall part 2:  ", ieval, 23
+         ieall = 0
+      end if
+
+      ieval = 0
+      ieval = ieval + ie3(11,19)       ! count(1)
+      ieval = ieval + ie3(25,27)       ! count(1)
+      ieval = ieval + ie3(11,22)       ! count(1)
+      ieval = ieval + ie3(11,10)       ! count(1)
+      ieval = ieval + ie3(21,32)       ! count(1)
+      ieval = ieval + ie3(21,20)       ! count(1)
+      ieval = ieval + ie3(1,2)         ! count(1)
+      ieval = ieval + ie3(32,31)       ! count(1)
+      ieval = ieval + ie3(3,0)         ! count(1)
+      ieval = ieval + ie3(0,47)                ! count(1)
+      ieval = ieval + ie3(65,65)       ! count(1)
+      if (ieval .ne. 246) then         ! count(1)
+         print *,"ieall part 3:  ", ieval, 246
+         ieall = 0
+      end if
+      end
+
+C Test IF-THEN-ELSE.
+      integer function ie1(i,j)
+      implicit none
+      integer i,j
+      integer foo
+
+      ie1 = 0                          ! count(5)
+                                       ! branch(40)
+      if (i .ne. 0) then               ! count(5)
+                                       ! branch(0)
+         if (j .ne. 0) then            ! count(3)
+                                       ! branch(end)
+            ie1 = foo(4)               ! count(3)
+         else
+            ie1 = foo(1024)
+         end if
+      else
+                                       ! branch(50)
+         if (j .ne. 0) then            ! count(2)
+                                       ! branch(end)
+            ie1 = foo(1)               ! count(1)
+         else
+            ie1 = foo(2)               ! count(1)
+         end if
+      end if
+                                       ! branch(80)
+      if (i .gt. j) then               ! count(5)
+                                       ! branch(end)
+         ie1 = foo(ie1*2)
+      end if
+                                       ! branch(80)
+      if (i .gt. 10) then              ! count(5)
+                                       ! branch(0)
+         if (j .gt. 10) then           ! count(1)
+                                       ! branch(end)
+            ie1 = foo(ie1*4)           ! count(1)
+         end if
+      end if
+      end
+
+C Test a series of simple IF-THEN statements.
+      integer function ie2(i)
+      implicit none
+      integer i
+      integer foo
+      ie2 = 0                          ! count(6)
+
+                                       ! branch(83)
+      if (i .eq. 0) then               ! count(6)
+                                       ! branch(end)
+         ie2 = foo(1)                  ! count(1)
+      end if
+                                       ! branch(100)
+      if (i .eq. 1) then               ! count(6)
+                                       ! branch(end)
+         ie2 = foo(1024)
+      end if
+                                       ! branch(50)
+      if (i .eq. 2) then               ! count(6)
+                                       ! branch(end)
+         ie2 = foo(2)                  ! count(3)
+      end if
+                                       ! branch(67)
+      if (i .eq. 3) then               ! count(6)
+                                       ! branch(end)
+         ie2 = foo(8)                  ! count(2)
+      end if
+                                       ! branch(100)
+      if (i .eq. 4) then               ! count(6)
+                                       ! branch(end)
+         ie2 = foo(2048)
+      end if
+
+      end
+
+C Test nested IF statements and IF with compound expressions.
+      integer function ie3(i,j)
+      implicit none
+      integer i,j
+      integer foo
+
+      ie3 = 1                          ! count(11)
+                                       ! branch(27 50 75)
+      if ((i .gt. 10) .and. (j .gt. i) .and. (j .lt. 20)) then ! count(11)
+                                       ! branch(end)
+         ie3 = foo(16)                 ! count(1)
+      end if
+                                       ! branch(55)
+      if (i .gt. 20) then              ! count(11)
+                                       ! branch(60)
+         if (j .gt. i) then            ! count(5)
+                                       ! branch(50)
+            if (j .lt. 30) then                ! count(2)
+                                       ! branch(end)
+               ie3 = foo(32)           ! count(1)
+            end if
+         end if
+      end if
+                                       ! branch(9 10 11)
+      if ((i .eq. 3) .or. (j .eq. 47) .or. (i .eq.j)) then ! count(11)
+                                       ! branch(end)
+         ie3 = foo(64)                 ! count(3)
+      end if
+      end
+C
+C { dg-final { run-gcov -b gcov-1.f } }