* ilogb in tgmath broken
@ 2003-06-15 16:36 Andreas Jaeger
2003-06-16 7:53 ` Ulrich Drepper
0 siblings, 1 reply; 2+ messages in thread
From: Andreas Jaeger @ 2003-06-15 16:36 UTC (permalink / raw)
To: GNU libc hacker
[-- Attachment #1: Type: text/plain, Size: 4855 bytes --]
Dinkumware pointed out that ilogb is broken:
http://www.dinkumware.com/conform_c.html#glibc230_results
I'm appending a patch and a testcase.
Ok to commit?
Andreas
2003-06-15 Andreas Jaeger <aj@suse.de>
* math/Makefile (CFLAGS-test-tgmath-ret.c): New.
(tests): Add test-tgmath-ret.
* math/test-tgmath-ret.c: New file.
* math/tgmath.h (ilogb): Return always an int.
============================================================
Index: math/tgmath.h
--- math/tgmath.h 3 Mar 2003 19:39:31 -0000 1.20
+++ math/tgmath.h 15 Jun 2003 16:18:49 -0000
@@ -400,7 +400,7 @@
__TGMATH_BINARY_FIRST_REAL_ONLY (Val1, Val2, scalbln)
/* Return the binary exponent of X, which must be nonzero. */
-#define ilogb(Val) __TGMATH_UNARY_REAL_ONLY (Val, ilogb)
+#define ilogb(Val) __TGMATH_UNARY_REAL_RET_ONLY (Val, int, ilogb)
/* Return positive difference between X and Y. */
============================================================
Index: math/Makefile
--- math/Makefile 21 Feb 2003 05:37:51 -0000 1.120
+++ math/Makefile 15 Jun 2003 16:18:49 -0000
@@ -87,7 +87,7 @@ distribute += $(filter-out $(generated),
# Rules for the test suite.
tests = test-matherr test-fenv atest-exp atest-sincos atest-exp2 basic-test \
- test-misc test-fpucw tst-definitions test-tgmath
+ test-misc test-fpucw tst-definitions test-tgmath test-tgmath-ret
# We do the `long double' tests only if this data type is available and
# distinct from `double'.
test-longdouble-yes = test-ldouble test-ildoubl
@@ -126,6 +126,7 @@ CFLAGS-test-float.c = -fno-inline -ffloa
CFLAGS-test-double.c = -fno-inline -ffloat-store
CFLAGS-test-ldouble.c = -fno-inline -ffloat-store
CFLAGS-test-tgmath.c = -fno-builtin
+CFLAGS-test-tgmath-ret.c = -fno-builtin
CPPFLAGS-test-ifloat.c = -U__LIBC_INTERNAL_MATH_INLINES -D__FAST_MATH__ \
-DTEST_FAST_MATH
CPPFLAGS-test-idouble.c = -U__LIBC_INTERNAL_MATH_INLINES -D__FAST_MATH__ \
============================================================
Index: math/test-tgmath-ret.c
--- math/test-tgmath-ret.c created
+++ math/test-tgmath-ret.c 2003-06-15 17:47:36.000000000 +0200 1.1
@@ -0,0 +1,82 @@
+/* Test compilation of tgmath macros.
+ Copyright (C) 2003 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Andreas Jaeger <aj@suse.de>, 2003.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, write to the Free
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
+
+#include <math.h>
+#include <complex.h>
+#include <tgmath.h>
+#include <stdio.h>
+
+float fx;
+double dx;
+long double lx;
+int errors = 0;
+
+void
+our_error (const char *c)
+{
+ puts (c);
+ ++errors;
+}
+
+/* First function where the return type is constant. */
+
+#define CHECK_RET_CONST_TYPE(func, rettype, arg, name) \
+ if (sizeof (func (arg)) != sizeof (rettype)) \
+ our_error ("Return size of " #func " is wrong with " #name " argument");
+
+#define CHECK_RET_CONST_FLOAT(func, rettype) \
+ CHECK_RET_CONST_TYPE (func, rettype, fx, float)
+#define CHECK_RET_CONST_DOUBLE(func, rettype) \
+ CHECK_RET_CONST_TYPE (func, rettype, dx, double)
+#ifdef NO_LONG_DOUBLE
+# define CHECK_RET_CONST_LDOUBLE(func, rettype)
+#else
+# define CHECK_RET_CONST_LDOUBLE(func, rettype) \
+ CHECK_RET_CONST_TYPE (func, rettype, lx, long double)
+#endif
+
+#define CHECK_RET_CONST(func, rettype) \
+void \
+check_return_ ##func (void) \
+{ \
+ CHECK_RET_CONST_FLOAT (func, rettype) \
+ CHECK_RET_CONST_DOUBLE (func, rettype) \
+ CHECK_RET_CONST_LDOUBLE (func, rettype) \
+}
+
+CHECK_RET_CONST(ilogb, int)
+CHECK_RET_CONST(lrint, long)
+CHECK_RET_CONST(lround, long)
+CHECK_RET_CONST(llrint, long long)
+CHECK_RET_CONST(llround, long long)
+
+int
+main (void)
+{
+ check_return_ilogb ();
+ check_return_lrint ();
+ check_return_lround ();
+ check_return_llrint ();
+ check_return_llround ();
+
+ printf ("%Zd\n", sizeof(carg (lx)));
+
+ return errors != 0;
+}
--
Andreas Jaeger, SuSE Linux AG, aj@suse.de, http://www.suse.de/~aj
GPG fingerprint = 93A3 365E CE47 B889 DF7F FED1 389A 563C C272 A126
[-- Attachment #2: Type: application/pgp-signature, Size: 197 bytes --]
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: ilogb in tgmath broken
2003-06-15 16:36 ilogb in tgmath broken Andreas Jaeger
@ 2003-06-16 7:53 ` Ulrich Drepper
0 siblings, 0 replies; 2+ messages in thread
From: Ulrich Drepper @ 2003-06-16 7:53 UTC (permalink / raw)
To: Andreas Jaeger; +Cc: GNU libc hacker
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Andreas Jaeger wrote:
> 2003-06-15 Andreas Jaeger <aj@suse.de>
>
> * math/Makefile (CFLAGS-test-tgmath-ret.c): New.
> (tests): Add test-tgmath-ret.
> * math/test-tgmath-ret.c: New file.
>
> * math/tgmath.h (ilogb): Return always an int.
I've committed the patch. Thanks,
- --
- --------------. ,-. 444 Castro Street
Ulrich Drepper \ ,-----------------' \ Mountain View, CA 94041 USA
Red Hat `--' drepper at redhat.com `---------------------------
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.1 (GNU/Linux)
iD8DBQE+7Xca2ijCOnn/RHQRAszIAJ9DZS9nq0y+7P3uDRRWjsqvYvZrNgCeJSJE
tT8PEp0Vd152REbSrvTQMJs=
=92sz
-----END PGP SIGNATURE-----
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2003-06-16 7:53 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-06-15 16:36 ilogb in tgmath broken Andreas Jaeger
2003-06-16 7:53 ` Ulrich Drepper
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).