Re: regression in tgamma?

Paul Zimmermann <[email protected]>
Newsgroups gmane.comp.lib.newlib
Message-ID <[email protected]>
       Hi Jeff,

> I have modified er_lgamma.c, erf_lgamma.c, w_tgamma.c, wf_tgamma.c based on
> code changes in picolibc.
> I did not add the new ___ieee754_ sub-functions and instead modified the
> existing code assuming that the function
> was called with *signgam = 0.  We can always do a merge from picolibc in the
> future.
> 
> With the new code, the test runs as expected.
> 
> Paul, please confirm before tomorrow.

version b2f3d59 fails to compile on my x86_64 machine:

../../../../../newlib/libm/math/w_tgamma.c: In function ‘tgamma’:
../../../../../newlib/libm/math/w_tgamma.c:38:6: error: ‘errno’ undeclared (first use in this function)
   38 |      errno = EDOM;
      |      ^~~~~
../../../../../newlib/libm/math/w_tgamma.c:19:1: note: ‘errno’ is defined in header ‘<errno.h>’; did you forget to ‘#include <errno.h>’?
   18 | #include "fdlibm.h"
  +++ |+#include <errno.h>

../../../../../newlib/libm/math/w_tgamma.c:38:6: note: each undeclared identifier is reported only once for each function it appears in
   38 |      errno = EDOM;
      |      ^~~~~
../../../../../newlib/libm/math/w_tgamma.c:38:14: error: ‘EDOM’ undeclared (first use in this function)
   38 |      errno = EDOM;
      |              ^~~~
../../../../../newlib/libm/math/w_tgamma.c:40:14: error: ‘ERANGE’ undeclared (first use in this function)
   40 |      errno = ERANGE;
      |              ^~~~~~

It does after the following changes:

diff --git a/newlib/libm/math/w_tgamma.c b/newlib/libm/math/w_tgamma.c
index 0f90dd4c6..52d5d71d3 100644
--- a/newlib/libm/math/w_tgamma.c
+++ b/newlib/libm/math/w_tgamma.c
@@ -16,6 +16,7 @@
  */
 
 #include "fdlibm.h"
+#include <errno.h>
 
 #ifndef _DOUBLE_IS_32BITS
 
diff --git a/newlib/libm/math/wf_tgamma.c b/newlib/libm/math/wf_tgamma.c
index 80aacf757..504cb4c29 100644
--- a/newlib/libm/math/wf_tgamma.c
+++ b/newlib/libm/math/wf_tgamma.c
@@ -15,6 +15,7 @@
 
 #include "math.h"
 #include "fdlibm.h"
+#include <errno.h>
 
 #ifdef __STDC__
        float tgammaf(float x)
@@ -34,7 +35,6 @@
            errno = EDOM;
          else if (finite(x))
            errno = ERANGE;
-       }
        return y;
 #endif
 }

and my small test program gives:

zimmerma@tomate:/tmp/newlib-cygwin$ ./a.out 
x=-0x0p+0 y=-inf
x=-0x1.53f198fe3b278p+7 y=0x1.fd6d312572d9cp-1015

which is ok. I'll do some further tests.

Paul
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.