2007-10-07 Thomas Koenig <tkoenig@gcc.gnu.org>
authortkoenig <tkoenig@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 7 Oct 2007 21:36:09 +0000 (21:36 +0000)
committertkoenig <tkoenig@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 7 Oct 2007 21:36:09 +0000 (21:36 +0000)
PR libfortran/33683
* mathbuiltins.def (GAMMA):  Change function name to
"tgamma" instad of "gamma".

2007-10-07  Thomas Koenig  <tkoenig@gcc.gnu.org>

PR libfortran/33683
* gfortran.dg/gamma_5.f90:  New test case

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@129116 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/fortran/ChangeLog
gcc/fortran/mathbuiltins.def
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/gamma_5.f90 [new file with mode: 0644]

index 28ed3f7..0f5758a 100644 (file)
@@ -1,3 +1,9 @@
+2007-10-07  Thomas Koenig  <tkoenig@gcc.gnu.org>
+
+       PR libfortran/33683
+       * mathbuiltins.def (GAMMA):  Change function name to
+       "tgamma" instad of "gamma".
+
 2007-10-07  Tobias Schlüter  <tobi@gcc.gnu.org>
 
        PR fortran/20851
index 33e87d1..37758e1 100644 (file)
@@ -30,5 +30,5 @@ DEFINE_MATH_BUILTIN   (Y1,    "y1",     0)
 DEFINE_MATH_BUILTIN   (YN,    "yn",     2)
 DEFINE_MATH_BUILTIN   (ERF,   "erf",    0)
 DEFINE_MATH_BUILTIN   (ERFC,  "erfc",   0)
-DEFINE_MATH_BUILTIN   (GAMMA, "gamma",  0)
+DEFINE_MATH_BUILTIN   (GAMMA, "tgamma", 0)
 DEFINE_MATH_BUILTIN   (LGAMMA,"lgamma", 0)
index 102c108..3997ac3 100644 (file)
@@ -1,3 +1,8 @@
+2007-10-07  Thomas Koenig  <tkoenig@gcc.gnu.org>
+
+       PR libfortran/33683
+       * gfortran.dg/gamma_5.f90:  New test case
+
 2007-10-07  Tobias Schlüter  <tobi@gcc.gnu.org>
 
        PR fortran/20851
diff --git a/gcc/testsuite/gfortran.dg/gamma_5.f90 b/gcc/testsuite/gfortran.dg/gamma_5.f90
new file mode 100644 (file)
index 0000000..6945cfd
--- /dev/null
@@ -0,0 +1,42 @@
+! { dg-do run }
+! PR 33683 - we used to pick up the wrong gamma function
+! from the library on some systems.
+program main
+  implicit none
+  integer, parameter :: n_max = 20
+  double precision, dimension(0:n_max) :: c
+  double precision :: pi
+  integer :: n
+  double precision :: td, xd
+  real :: ts,xs
+
+  pi = 4 * atan(1.d0)
+  c(0) = 1.
+  do n=1, n_max
+     c(n) = (2*n-1)*c(n-1)*0.5d0
+  end do
+
+  do n=1, n_max
+     xs = n + 0.5
+     xd = n + 0.5d0
+     td = c(n)*sqrt(pi)
+     ts = c(n)*sqrt(pi)
+     if (abs(gamma(xs)-ts)/ts > 2e-6) call abort
+     if (abs(gamma(xd)-td)/td > 5e-14) call abort
+  end do
+  call tst_s(2.3, gamma(2.3))
+  call tst_s(3.7, gamma(3.7))
+  call tst_s(5.5, gamma(5.5))
+  call tst_d(4.2d0, gamma(4.2d0))
+  call tst_d(8.1d0, gamma(8.1d0))
+contains
+  subroutine tst_s(a, b)
+    real :: a, b
+    if (abs(gamma(a) - b)/b > 1e-6) call abort
+  end subroutine tst_s
+
+  subroutine tst_d(a, b)
+    double precision :: a,b
+    if (abs(gamma(a) - b)/b > 5e-14) call abort
+  end subroutine tst_d
+end program main